diff options
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); |