io_uring: clear req->result always before issuing a read/write request
authorBijan Mottahedeh <bijan.mottahedeh@oracle.com>
Thu, 16 Jan 2020 02:37:45 +0000 (18:37 -0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 16 Jan 2020 04:36:13 +0000 (21:36 -0700)
commit797f3f535d59f05ad12c629338beef6cb801d19e
treea0789204f588efa9b836fc8400d36071050a1e53
parent78912934f4f7dd7a424159c69bf9bdd46e823781
io_uring: clear req->result always before issuing a read/write request

req->result is cleared when io_issue_sqe() calls io_read/write_pre()
routines.  Those routines however are not called when the sqe
argument is NULL, which is the case when io_issue_sqe() is called from
io_wq_submit_work().  io_issue_sqe() may then examine a stale result if
a polled request had previously failed with -EAGAIN:

        if (ctx->flags & IORING_SETUP_IOPOLL) {
                if (req->result == -EAGAIN)
                        return -EAGAIN;

                io_iopoll_req_issued(req);
        }

and in turn cause a subsequently completed request to be re-issued in
io_wq_submit_work().

Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/io_uring.c