| From 6873e0bd6a9cb14ecfadd89d9ed9698ff1761902 Mon Sep 17 00:00:00 2001 |
| From: Jens Axboe <axboe@kernel.dk> |
| Date: Wed, 30 Oct 2019 13:53:09 -0600 |
| Subject: io_uring: ensure we clear io_kiocb->result before each issue |
| |
| From: Jens Axboe <axboe@kernel.dk> |
| |
| commit 6873e0bd6a9cb14ecfadd89d9ed9698ff1761902 upstream. |
| |
| We use io_kiocb->result == -EAGAIN as a way to know if we need to |
| re-submit a polled request, as -EAGAIN reporting happens out-of-line |
| for IO submission failures. This field is cleared when we originally |
| allocate the request, but it isn't reset when we retry the submission |
| from async context. This can cause issues where we think something |
| needs a re-issue, but we're really just reading stale data. |
| |
| Reset ->result whenever we re-prep a request for polled submission. |
| |
| Cc: stable@vger.kernel.org |
| Fixes: 9e645e1105ca ("io_uring: add support for sqe links") |
| Reported-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com> |
| Signed-off-by: Jens Axboe <axboe@kernel.dk> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/io_uring.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/fs/io_uring.c |
| +++ b/fs/io_uring.c |
| @@ -1078,6 +1078,7 @@ static int io_prep_rw(struct io_kiocb *r |
| |
| kiocb->ki_flags |= IOCB_HIPRI; |
| kiocb->ki_complete = io_complete_rw_iopoll; |
| + req->result = 0; |
| } else { |
| if (kiocb->ki_flags & IOCB_HIPRI) |
| return -EINVAL; |