Update API for file write hints
authorJens Axboe <axboe@kernel.dk>
Tue, 27 Jun 2017 19:06:57 +0000 (13:06 -0600)
committerJens Axboe <axboe@kernel.dk>
Tue, 27 Jun 2017 19:06:57 +0000 (13:06 -0600)
This is now queued up for 4.13 inclusion. Adjust the bits we need
to conform to what is queued up.

Signed-off-by: Jens Axboe <axboe@kernel.dk>
ioengines.c
os/os-linux.h

index abbaa9a7bd46eb3478706183fad658607d3058d9..6e6e3dea019e2b54a127a1dfea9e6e2b90dde48a 100644 (file)
@@ -476,8 +476,19 @@ int td_io_open_file(struct thread_data *td, struct fio_file *f)
        if (fio_option_is_set(&td->o, write_hint) &&
            (f->filetype == FIO_TYPE_BLOCK || f->filetype == FIO_TYPE_FILE)) {
                uint64_t hint = td->o.write_hint;
+               int cmd;
 
-               if (fcntl(f->fd, F_SET_RW_HINT, &hint) < 0) {
+               /*
+                * For direct IO, we just need/want to set the hint on
+                * the file descriptor. For buffered IO, we need to set
+                * it on the inode.
+                */
+               if (td->o.odirect)
+                       cmd = F_SET_FILE_RW_HINT;
+               else
+                       cmd = F_SET_RW_HINT;
+
+               if (fcntl(f->fd, cmd, &hint) < 0) {
                        td_verror(td, errno, "fcntl write hint");
                        goto err;
                }
index 3e7a2fc3303639564d47e06595c932f3b6322fb2..8c1e93be067c9e0cd702ed23b4e8baba5a7f5ef7 100644 (file)
@@ -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