X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=os%2Fos-linux.h;h=b36d33c9804cc60f1c89699c6bd1f41ca4d22e50;hb=6562685f373b9bc5f1ed909281737f55b34934a4;hp=e1936342bd54fceac5b61d765a86adfacfdcf970;hpb=df73aab128ff3f1ff5091fb0b5a0e7728f86499f;p=fio.git diff --git a/os/os-linux.h b/os/os-linux.h index e1936342..b36d33c9 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -37,6 +38,7 @@ #define FIO_HAVE_BINJECT #define FIO_HAVE_GETTID #define FIO_USE_GENERIC_INIT_RANDOM_STATE +#define FIO_HAVE_PWRITEV2 #ifdef MAP_HUGETLB #define FIO_HAVE_MMAP_HUGE @@ -247,7 +249,7 @@ static inline int arch_cache_line_size(void) return atoi(size); } -static inline unsigned long long get_fs_size(const char *path) +static inline unsigned long long get_fs_free_size(const char *path) { unsigned long long ret; struct statfs s; @@ -282,4 +284,61 @@ static inline int fio_set_sched_idle(void) } #endif +#ifndef POSIX_FADV_STREAMID +#define POSIX_FADV_STREAMID 8 +#endif + +#define FIO_HAVE_STREAMID + +#ifndef RWF_HIPRI +#define RWF_HIPRI 0x00000001 +#endif +#ifndef RWF_DSYNC +#define RWF_DSYNC 0x00000002 +#endif +#ifndef RWF_SYNC +#define RWF_SYNC 0x00000004 +#endif + +#ifndef CONFIG_PWRITEV2 +#ifdef __NR_preadv2 +static inline void make_pos_h_l(unsigned long *pos_h, unsigned long *pos_l, + off_t offset) +{ + *pos_l = offset & 0xffffffff; + *pos_h = ((uint64_t) offset) >> 32; + +} +static inline ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, + off_t offset, unsigned int flags) +{ + unsigned long pos_l, pos_h; + + make_pos_h_l(&pos_h, &pos_l, offset); + return syscall(__NR_preadv2, fd, iov, iovcnt, pos_l, pos_h, flags); +} +static inline ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, + off_t offset, unsigned int flags) +{ + unsigned long pos_l, pos_h; + + make_pos_h_l(&pos_h, &pos_l, offset); + return syscall(__NR_pwritev2, fd, iov, iovcnt, pos_l, pos_h, flags); +} +#else +static inline ssize_t preadv2(int fd, const struct iovec *iov, int iovcnt, + off_t offset, unsigned int flags) +{ + errno = ENOSYS; + return -1; +} +static inline ssize_t pwritev2(int fd, const struct iovec *iov, int iovcnt, + off_t offset, unsigned int flags) +{ + errno = ENOSYS; + return -1; +} +#endif /* __NR_preadv2 */ +#endif /* CONFIG_PWRITEV2 */ + #endif