diff options
author | Jens Axboe <axboe@kernel.dk> | 2019-10-30 20:53:09 +0100 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2019-10-30 21:45:22 +0100 |
commit | 6873e0bd6a9cb14ecfadd89d9ed9698ff1761902 (patch) | |
tree | 6d90ad4c5a4ab0213fdbc8d7e8c3b8d22cfa98db /fs | |
parent | um-ubd: Entrust re-queue to the upper layers (diff) | |
download | linux-6873e0bd6a9cb14ecfadd89d9ed9698ff1761902.tar.xz linux-6873e0bd6a9cb14ecfadd89d9ed9698ff1761902.zip |
io_uring: ensure we clear io_kiocb->result before each issue
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>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/io_uring.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index c11c4157a4c2..f9a38998f2fc 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -1124,6 +1124,7 @@ static int io_prep_rw(struct io_kiocb *req, const struct sqe_submit *s, kiocb->ki_flags |= IOCB_HIPRI; kiocb->ki_complete = io_complete_rw_iopoll; + req->result = 0; } else { if (kiocb->ki_flags & IOCB_HIPRI) return -EINVAL; |