diff options
author | Adam Manzanares <adam.manzanares@wdc.com> | 2018-05-22 13:52:19 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2018-05-31 10:50:55 -0400 |
commit | d9a08a9e616beeccdbd0e7262b7225ffdfa49e92 (patch) | |
tree | f2f7985aa07ccee2337631273f4b906389649477 /fs/aio.c | |
parent | fc28724d67c90ff48b976e0687caf79993160bed (diff) |
fs: Add aio iopriority support
This is the per-I/O equivalent of the ioprio_set system call.
When IOCB_FLAG_IOPRIO is set on the iocb aio_flags field, then we set the
newly added kiocb ki_ioprio field to the value in the iocb aio_reqprio field.
This patch depends on block: add ioprio_check_cap function.
Signed-off-by: Adam Manzanares <adam.manzanares@wdc.com>
Reviewed-by: Jeff Moyer <jmoyer@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/aio.c')
-rw-r--r-- | fs/aio.c | 16 |
1 files changed, 16 insertions, 0 deletions
@@ -1435,6 +1435,22 @@ static int aio_prep_rw(struct kiocb *req, struct iocb *iocb) | |||
1435 | if (iocb->aio_flags & IOCB_FLAG_RESFD) | 1435 | if (iocb->aio_flags & IOCB_FLAG_RESFD) |
1436 | req->ki_flags |= IOCB_EVENTFD; | 1436 | req->ki_flags |= IOCB_EVENTFD; |
1437 | req->ki_hint = ki_hint_validate(file_write_hint(req->ki_filp)); | 1437 | req->ki_hint = ki_hint_validate(file_write_hint(req->ki_filp)); |
1438 | if (iocb->aio_flags & IOCB_FLAG_IOPRIO) { | ||
1439 | /* | ||
1440 | * If the IOCB_FLAG_IOPRIO flag of aio_flags is set, then | ||
1441 | * aio_reqprio is interpreted as an I/O scheduling | ||
1442 | * class and priority. | ||
1443 | */ | ||
1444 | ret = ioprio_check_cap(iocb->aio_reqprio); | ||
1445 | if (ret) { | ||
1446 | pr_debug("aio ioprio check cap error\n"); | ||
1447 | return -EINVAL; | ||
1448 | } | ||
1449 | |||
1450 | req->ki_ioprio = iocb->aio_reqprio; | ||
1451 | } else | ||
1452 | req->ki_ioprio = IOPRIO_PRIO_VALUE(IOPRIO_CLASS_NONE, 0); | ||
1453 | |||
1438 | ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags); | 1454 | ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags); |
1439 | if (unlikely(ret)) | 1455 | if (unlikely(ret)) |
1440 | fput(req->ki_filp); | 1456 | fput(req->ki_filp); |