Skip to content

Commit

Permalink
Fall back to F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported
Browse files Browse the repository at this point in the history
Linux kernel commit 7b12e49669c9 ("fs: remove fs.f_write_hint") removed
F_SET_FILE_RW_HINT support from the Linux kernel. Hence fall back to
F_SET_RW_HINT if F_SET_FILE_RW_HINT is not supported.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
  • Loading branch information
bvanassche committed Dec 7, 2023
1 parent bdf99b6 commit 0cfea59
Showing 1 changed file with 12 additions and 10 deletions.
22 changes: 12 additions & 10 deletions ioengines.c
Original file line number Diff line number Diff line change
Expand Up @@ -590,19 +590,21 @@ 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;
int res;

/*
* 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.
* For direct IO, set the hint on the file descriptor if that is
* supported. Otherwise set it on the inode. 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) {
if (td->o.odirect) {
res = fcntl(f->fd, F_SET_FILE_RW_HINT, &hint);
if (res < 0)
res = fcntl(f->fd, F_SET_RW_HINT, &hint);
} else {
res = fcntl(f->fd, F_SET_RW_HINT, &hint);
}
if (res < 0) {
td_verror(td, errno, "fcntl write hint");
goto err;
}
Expand Down

0 comments on commit 0cfea59

Please sign in to comment.