Message ID | 20181130165646.27341-3-axboe@kernel.dk (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/27] aio: fix failure to put the file pointer | expand |
I think we'll need to queue this up for 4.21 ASAP independent of the rest, given that with separate poll queues userspace could otherwise submit I/O that will never get polled for anywhere.
On 11/30/18 10:13 AM, Christoph Hellwig wrote: > I think we'll need to queue this up for 4.21 ASAP independent of the > rest, given that with separate poll queues userspace could otherwise > submit I/O that will never get polled for anywhere. Probably a good idea, I can just move it to my 4.21 branch, it's not strictly dependent on the series.
On Fri, Nov 30, 2018 at 10:14:31AM -0700, Jens Axboe wrote: > On 11/30/18 10:13 AM, Christoph Hellwig wrote: > > I think we'll need to queue this up for 4.21 ASAP independent of the > > rest, given that with separate poll queues userspace could otherwise > > submit I/O that will never get polled for anywhere. > > Probably a good idea, I can just move it to my 4.21 branch, it's not > strictly dependent on the series. So, can you add it to the 4.21 branch?
On 12/4/18 7:46 AM, Christoph Hellwig wrote: > On Fri, Nov 30, 2018 at 10:14:31AM -0700, Jens Axboe wrote: >> On 11/30/18 10:13 AM, Christoph Hellwig wrote: >>> I think we'll need to queue this up for 4.21 ASAP independent of the >>> rest, given that with separate poll queues userspace could otherwise >>> submit I/O that will never get polled for anywhere. >> >> Probably a good idea, I can just move it to my 4.21 branch, it's not >> strictly dependent on the series. > > So, can you add it to the 4.21 branch? Done
diff --git a/fs/aio.c b/fs/aio.c index 205390c0c1bb..05647d352bf3 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1436,8 +1436,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; @@ -1446,7 +1445,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; }