solaris: #include <pthread.h>
[fio.git] / os / os-linux.h
index 3e7a2fc3303639564d47e06595c932f3b6322fb2..1ad6ebd28497e3257e52c58353881357b0c90f8e 100644 (file)
@@ -281,7 +281,7 @@ static inline unsigned long long get_fs_free_size(const char *path)
        return ret;
 }
 
-static inline int os_trim(int fd, unsigned long long start,
+static inline int os_trim(struct fio_file *f, unsigned long long start,
                          unsigned long long len)
 {
        uint64_t range[2];
@@ -289,7 +289,7 @@ static inline int os_trim(int fd, unsigned long long start,
        range[0] = start;
        range[1] = len;
 
-       if (!ioctl(fd, BLKDISCARD, range))
+       if (!ioctl(f->fd, BLKDISCARD, range))
                return 0;
 
        return errno;
@@ -309,14 +309,17 @@ static inline int fio_set_sched_idle(void)
 #endif
 #define F_GET_RW_HINT          (F_LINUX_SPECIFIC_BASE + 11)
 #define F_SET_RW_HINT          (F_LINUX_SPECIFIC_BASE + 12)
+#define F_GET_FILE_RW_HINT     (F_LINUX_SPECIFIC_BASE + 13)
+#define F_SET_FILE_RW_HINT     (F_LINUX_SPECIFIC_BASE + 14)
 #endif
 
 #ifndef RWH_WRITE_LIFE_NONE
-#define RWH_WRITE_LIFE_NONE    0
-#define RWH_WRITE_LIFE_SHORT   1
-#define RWH_WRITE_LIFE_MEDIUM  2
-#define RWH_WRITE_LIFE_LONG    3
-#define RWH_WRITE_LIFE_EXTREME 4
+#define RWH_WRITE_LIFE_NOT_SET 0
+#define RWH_WRITE_LIFE_NONE    1
+#define RWH_WRITE_LIFE_SHORT   2
+#define RWH_WRITE_LIFE_MEDIUM  3
+#define RWH_WRITE_LIFE_LONG    4
+#define RWH_WRITE_LIFE_EXTREME 5
 #endif
 
 #define FIO_HAVE_WRITE_HINT
@@ -389,4 +392,22 @@ static inline int shm_attach_to_open_removed(void)
        return 1;
 }
 
+#ifdef CONFIG_LINUX_FALLOCATE
+#define FIO_HAVE_NATIVE_FALLOCATE
+static inline bool fio_fallocate(struct fio_file *f, uint64_t offset,
+                                uint64_t len)
+{
+       int ret;
+       ret = fallocate(f->fd, 0, 0, len);
+       if (ret == 0)
+               return true;
+
+       /* Work around buggy old glibc versions... */
+       if (ret > 0)
+               errno = ret;
+
+       return false;
+}
+#endif
+
 #endif