File: fadvise64.c

package info (click to toggle)
systemtap 4.8-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 39,000 kB
  • sloc: cpp: 78,785; ansic: 62,419; xml: 49,443; exp: 42,735; sh: 11,254; python: 3,062; perl: 2,252; tcl: 1,305; makefile: 1,072; lisp: 105; awk: 101; asm: 91; java: 56; sed: 16
file content (112 lines) | stat: -rw-r--r-- 3,811 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/* COVERAGE: fadvise64 fadvise64_64 */

#define _GNU_SOURCE
#define _LARGEFILE64_SOURCE
#define _ISOC99_SOURCE		   /* Needed for LLONG_MAX on RHEL5 */
#define _FILE_OFFSET_BITS 64

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <limits.h>
#include <unistd.h>
#include <sys/syscall.h>

/*
 * There are actually 2 related syscalls here:
 *
 * - fadvise64(int fd, loff_t offset, size_t len, int advice)
 * - fadvise64_64(int fd, loff_t offset, loff_t len, int advice)
 *
 * The difference is that on fadvise64(), 'offset' is 64-bit and 'len'
 * is 64-bits (on a 64-bit system) or 32-bits (on a 32-bit system),
 * while on fadvise64_64(), both 'offset' and 'len' are always
 * 64-bits. posix_fadvise() is a wrapper around fadvice64_64(), since
 * both 'offset' and 'len' are always 64-bits.
 *
 * So, let's define our own fadvice64() wrapper.
 */

#ifdef __NR_fadvise64
int __fadvise64(int fd, loff_t offset, size_t len, int advice)
{
#if defined(__powerpc__) && !defined(__powerpc64__)
    /* ppc (not ppc64) has an extra unused argument as arg 2 */
    return syscall(__NR_fadvise64, fd, 0, (unsigned int)(offset >> 32),
		   (unsigned int)offset, len, advice);
#else
    return syscall(__NR_fadvise64, fd, offset, len, advice);
#endif
}
#endif

int main()
{
    int fd;

    fd = open("foobar", O_WRONLY|O_CREAT, S_IRWXU);

    posix_fadvise(fd, 0, 1024, POSIX_FADV_NORMAL);
    //staptest// fadvise64 (NNNN, 0, 1024, POSIX_FADV_NORMAL) = 0

    /* Limit testing. */

    posix_fadvise(-1, 0, 1024, POSIX_FADV_RANDOM);
    //staptest// fadvise64 (-1, 0, 1024, POSIX_FADV_RANDOM) = NNNN

    posix_fadvise(fd, -1, 1024, POSIX_FADV_SEQUENTIAL);
    //staptest// fadvise64 (NNNN, -1, 1024, POSIX_FADV_SEQUENTIAL) = NNNN

    posix_fadvise(fd, 0, -1, POSIX_FADV_WILLNEED);
    //staptest// fadvise64 (NNNN, 0, -1, POSIX_FADV_WILLNEED) = NNNN

    posix_fadvise(fd, LLONG_MAX, 0, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 9223372036854775807, 0, POSIX_FADV_DONTNEED) = NNNN

    posix_fadvise(fd, 0x72345678deadbeefLL, 0, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 8229297496244731631, 0, POSIX_FADV_DONTNEED) = NNNN

    posix_fadvise(fd, 0, LLONG_MAX, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 0, 9223372036854775807, POSIX_FADV_DONTNEED) = NNNN
    posix_fadvise(fd, 0, 0x72345678deadbeefLL, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 0, 8229297496244731631, POSIX_FADV_DONTNEED) = NNNN

    posix_fadvise(fd, 0, 1024, -1);
    //staptest// fadvise64 (NNNN, 0, 1024, 0x[f]+) = NNNN

#ifdef __NR_fadvise64
    __fadvise64(fd, 0, 1024, POSIX_FADV_NORMAL);
    //staptest// fadvise64 (NNNN, 0, 1024, POSIX_FADV_NORMAL) = 0

    /* Limit testing. */

    __fadvise64(-1, 0, 1024, POSIX_FADV_RANDOM);
    //staptest// fadvise64 (-1, 0, 1024, POSIX_FADV_RANDOM) = NNNN

    __fadvise64(fd, -1, 1024, POSIX_FADV_SEQUENTIAL);
    //staptest// fadvise64 (NNNN, -1, 1024, POSIX_FADV_SEQUENTIAL) = NNNN

    __fadvise64(fd, 0, -1, POSIX_FADV_WILLNEED);
    //staptest// fadvise64 (NNNN, 0, -1, POSIX_FADV_WILLNEED) = NNNN

    __fadvise64(fd, LLONG_MAX, 0, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 9223372036854775807, 0, POSIX_FADV_DONTNEED) = NNNN

    __fadvise64(fd, 0x72345678deadbeefLL, 0, POSIX_FADV_DONTNEED);
    //staptest// fadvise64 (NNNN, 8229297496244731631, 0, POSIX_FADV_DONTNEED) = NNNN

    __fadvise64(fd, 0, LONG_MAX, POSIX_FADV_DONTNEED);
#if __WORDSIZE == 64
    //staptest// fadvise64 (NNNN, 0, 9223372036854775807, POSIX_FADV_DONTNEED) = NNNN
#else
    //staptest// fadvise64 (NNNN, 0, 2147483647, POSIX_FADV_DONTNEED) = NNNN
#endif
    
    __fadvise64(fd, 0, 1024, -1);
    //staptest// fadvise64 (NNNN, 0, 1024, 0x[f]+) = NNNN
#endif
    close(fd);
    return 0;
}