[PATCH] Allow proper sharing of files
[fio.git] / os-linux.h
1 #ifndef FIO_OS_LINUX_H
2 #define FIO_OS_LINUX_H
3
4 #include <sys/ioctl.h>
5
6 #define FIO_HAVE_LIBAIO
7 #define FIO_HAVE_POSIXAIO
8 #define FIO_HAVE_FADVISE
9 #define FIO_HAVE_CPU_AFFINITY
10 #define FIO_HAVE_DISK_UTIL
11 #define FIO_HAVE_SGIO
12 #define FIO_HAVE_IOPRIO
13
14 #define OS_MAP_ANON             (MAP_ANONYMOUS)
15
16 typedef cpu_set_t os_cpu_mask_t;
17
18 /*
19  * we want fadvise64 really, but it's so tangled... later
20  */
21 #define fadvise(fd, off, len, advice)   \
22         posix_fadvise((fd), (off_t)(off), (len), (advice))
23
24 #define fio_setaffinity(td)             \
25         sched_setaffinity((td)->pid, sizeof((td)->cpumask), &(td)->cpumask)
26 #define fio_getaffinity(pid, ptr)       \
27         sched_getaffinity((pid), sizeof(cpu_set_t), (ptr))
28
29 static inline int ioprio_set(int which, int who, int ioprio)
30 {
31         return syscall(__NR_ioprio_set, which, who, ioprio);
32 }
33
34 enum {
35         IOPRIO_WHO_PROCESS = 1,
36         IOPRIO_WHO_PGRP,
37         IOPRIO_WHO_USER,
38 };
39
40 #define IOPRIO_CLASS_SHIFT      13
41
42 #ifndef BLKGETSIZE64
43 #define BLKGETSIZE64    _IOR(0x12,114,size_t)
44 #endif
45
46 static inline int blockdev_size(int fd, unsigned long long *bytes)
47 {
48         if (!ioctl(fd, BLKGETSIZE64, bytes))
49                 return 0;
50
51         return errno;
52 }
53
54 #endif