diff options
author | Pavel Begunkov <asml.silence@gmail.com> | 2020-05-26 20:34:02 +0300 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2020-05-26 13:31:08 -0600 |
commit | 4518a3cc273cf82efdd36522fb1f13baad173c70 (patch) | |
tree | 73d08aa2e395a8f794c0313da1f8ac6e65dc7b81 /fs/io_uring.c | |
parent | 6b668c9b7fc6fc0c313cdaee8b75d17f4d954ab5 (diff) |
io_uring: fix flush req->refs underflow
In io_uring_cancel_files(), after refcount_sub_and_test() leaves 0
req->refs, it calls io_put_req(), which would also put a ref. Call
io_free_req() instead.
Cc: stable@vger.kernel.org
Fixes: 2ca10259b418 ("io_uring: prune request from overflow list on flush")
Signed-off-by: Pavel Begunkov <asml.silence@gmail.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'fs/io_uring.c')
-rw-r--r-- | fs/io_uring.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/fs/io_uring.c b/fs/io_uring.c index 0b51f21e5432..37422fcdaa7f 100644 --- a/fs/io_uring.c +++ b/fs/io_uring.c @@ -7534,7 +7534,7 @@ static void io_uring_cancel_files(struct io_ring_ctx *ctx, * all we had, then we're done with this request. */ if (refcount_sub_and_test(2, &cancel_req->refs)) { - io_put_req(cancel_req); + io_free_req(cancel_req); finish_wait(&ctx->inflight_wait, &wait); continue; } |