fs: Use RWF_* flags for AIO operations
aio_rw_flags is introduced in struct iocb (using aio_reserved1) which will carry the RWF_* flags. We cannot use aio_flags because they are not checked for validity which may break existing applications. Note, the only place RWF_HIPRI comes in effect is dio_await_one(). All the rest of the locations, aio code return -EIOCBQUEUED before the checks for RWF_HIPRI. Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Jan Kara <jack@suse.cz> Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
7fc9e47224
commit
9830f4be15
8
fs/aio.c
8
fs/aio.c
|
@ -1541,7 +1541,7 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
|
|||
ssize_t ret;
|
||||
|
||||
/* enforce forwards compatibility on users */
|
||||
if (unlikely(iocb->aio_reserved1 || iocb->aio_reserved2)) {
|
||||
if (unlikely(iocb->aio_reserved2)) {
|
||||
pr_debug("EINVAL: reserve field set\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -1586,6 +1586,12 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
|
|||
req->common.ki_flags |= IOCB_EVENTFD;
|
||||
}
|
||||
|
||||
ret = kiocb_set_rw_flags(&req->common, iocb->aio_rw_flags);
|
||||
if (unlikely(ret)) {
|
||||
pr_debug("EINVAL: aio_rw_flags\n");
|
||||
goto out_put_req;
|
||||
}
|
||||
|
||||
ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
|
||||
if (unlikely(ret)) {
|
||||
pr_debug("EFAULT: aio_key\n");
|
||||
|
|
|
@ -79,7 +79,7 @@ struct io_event {
|
|||
struct iocb {
|
||||
/* these are internal to the kernel/libc. */
|
||||
__u64 aio_data; /* data to be returned in event's data */
|
||||
__u32 PADDED(aio_key, aio_reserved1);
|
||||
__u32 PADDED(aio_key, aio_rw_flags);
|
||||
/* the kernel sets aio_key to the req # */
|
||||
|
||||
/* common fields */
|
||||
|
|
Loading…
Reference in New Issue