From: Jens Axboe Date: Tue, 27 Jun 2017 19:06:57 +0000 (-0600) Subject: Update API for file write hints X-Git-Tag: fio-2.99~21 X-Git-Url: https://git.kernel.dk/?p=fio.git;a=commitdiff_plain;h=bd553af6c8498deb87d666b7fa6d5750498a2c1b Update API for file write hints 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 --- diff --git a/ioengines.c b/ioengines.c index abbaa9a7..6e6e3dea 100644 --- a/ioengines.c +++ b/ioengines.c @@ -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; } diff --git a/os/os-linux.h b/os/os-linux.h index 3e7a2fc3..8c1e93be 100644 --- a/os/os-linux.h +++ b/os/os-linux.h @@ -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