53 lines
1.5 KiB
Diff
53 lines
1.5 KiB
Diff
From: Christoph Hellwig <hch@lst.de>
|
|
Date: Thu, 22 Nov 2018 16:44:07 +0100
|
|
Subject: [01/14] aio: clear IOCB_HIPRI
|
|
Origin: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git/commit?id=9101cbe70ef64c7f35fb75552005a3a696cc288e
|
|
|
|
commit 154989e45fd8de9bfb52bbd6e5ea763e437e54c5 upstream.
|
|
|
|
No one is going to poll for aio (yet), so we must clear the HIPRI
|
|
flag, as we would otherwise send it down the poll queues, where no
|
|
one will be polling for completions.
|
|
|
|
Signed-off-by: Christoph Hellwig <hch@lst.de>
|
|
|
|
IOCB_HIPRI, not RWF_HIPRI.
|
|
|
|
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
|
|
Signed-off-by: Jens Axboe <axboe@kernel.dk>
|
|
Cc: Guenter Roeck <linux@roeck-us.net>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
fs/aio.c | 11 ++++++++---
|
|
1 file changed, 8 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/fs/aio.c b/fs/aio.c
|
|
index 45d5ef8dd0a8..78aa249070b1 100644
|
|
--- a/fs/aio.c
|
|
+++ b/fs/aio.c
|
|
@@ -1438,8 +1438,7 @@ static int aio_prep_rw(struct kiocb *req, struct iocb *iocb)
|
|
ret = ioprio_check_cap(iocb->aio_reqprio);
|
|
if (ret) {
|
|
pr_debug("aio ioprio check cap error: %d\n", ret);
|
|
- fput(req->ki_filp);
|
|
- return ret;
|
|
+ goto out_fput;
|
|
}
|
|
|
|
req->ki_ioprio = iocb->aio_reqprio;
|
|
@@ -1448,7 +1447,13 @@ static int aio_prep_rw(struct kiocb *req, struct iocb *iocb)
|
|
|
|
ret = kiocb_set_rw_flags(req, iocb->aio_rw_flags);
|
|
if (unlikely(ret))
|
|
- fput(req->ki_filp);
|
|
+ goto out_fput;
|
|
+
|
|
+ req->ki_flags &= ~IOCB_HIPRI; /* no one is going to poll for this I/O */
|
|
+ return 0;
|
|
+
|
|
+out_fput:
|
|
+ fput(req->ki_filp);
|
|
return ret;
|
|
}
|
|
|