Skip to content

Commit 8f3d749

Browse files
committed
io_uring: don't re-setup vecs/iter in io_resumit_prep() is already there
If we already have mapped the necessary data for retry, then don't set it up again. It's a pointless operation, and we leak the iovec if it's a large (non-stack) vec. Fixes: b63534c ("io_uring: re-issue block requests that failed because of resources") Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent 6200b0a commit 8f3d749

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

fs/io_uring.c

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2294,13 +2294,17 @@ static bool io_resubmit_prep(struct io_kiocb *req, int error)
22942294
goto end_req;
22952295
}
22962296

2297-
ret = io_import_iovec(rw, req, &iovec, &iter, false);
2298-
if (ret < 0)
2299-
goto end_req;
2300-
ret = io_setup_async_rw(req, iovec, inline_vecs, &iter, false);
2301-
if (!ret)
2297+
if (!req->io) {
2298+
ret = io_import_iovec(rw, req, &iovec, &iter, false);
2299+
if (ret < 0)
2300+
goto end_req;
2301+
ret = io_setup_async_rw(req, iovec, inline_vecs, &iter, false);
2302+
if (!ret)
2303+
return true;
2304+
kfree(iovec);
2305+
} else {
23022306
return true;
2303-
kfree(iovec);
2307+
}
23042308
end_req:
23052309
req_set_fail_links(req);
23062310
io_req_complete(req, ret);

0 commit comments

Comments
 (0)