On 7/5/22 8:36 AM, Dylan Yudaken wrote: > On Mon, 2022-07-04 at 15:24 +0200, gregkh@xxxxxxxxxxxxxxxxxxx wrote: >> >> The patch below does not apply to the 5.18-stable tree. >> If someone wants it applied there, or to any other stable or longterm >> tree, then please email the backport, including the original git >> commit >> id to <stable@xxxxxxxxxxxxxxx>. >> >> thanks, >> >> greg k-h >> >> ------------------ original commit in Linus's tree ------------------ >> >> From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00 >> 2001 >> From: Dylan Yudaken <dylany@xxxxxx> >> Date: Thu, 30 Jun 2022 06:20:06 -0700 >> Subject: [PATCH] io_uring: fix provided buffer import >> >> io_import_iovec uses the s pointer, but this was changed immediately >> after the iovec was re-imported and so it was imported into the wrong >> place. >> >> Change the ordering. >> >> Fixes: 2be2eb02e2f5 ("io_uring: ensure reads re-import for selected >> buffers") >> Signed-off-by: Dylan Yudaken <dylany@xxxxxx> >> Link: >> https://lore.kernel.org/r/20220630132006.2825668-1-dylany@xxxxxx >> [axboe: ensure we don't half-import as well] >> Signed-off-by: Jens Axboe <axboe@xxxxxxxxx> >> >> diff --git a/fs/io_uring.c b/fs/io_uring.c >> index aeb042ba5cc5..0d491ad15b66 100644 >> --- a/fs/io_uring.c >> +++ b/fs/io_uring.c >> @@ -4318,18 +4318,19 @@ static int io_read(struct io_kiocb *req, >> unsigned int issue_flags) >> if (unlikely(ret < 0)) >> return ret; >> } else { >> + rw = req->async_data; >> + s = &rw->s; >> + >> /* >> * Safe and required to re-import if we're using >> provided >> * buffers, as we dropped the selected one before >> retry. >> */ >> - if (req->flags & REQ_F_BUFFER_SELECT) { >> + if (io_do_buffer_select(req)) { >> ret = io_import_iovec(READ, req, &iovec, s, >> issue_flags); >> if (unlikely(ret < 0)) >> return ret; >> } >> >> - rw = req->async_data; >> - s = &rw->s; >> /* >> * We come here from an earlier attempt, restore our >> state to >> * match in case it doesn't. It's cheap enough that >> we don't >> > > Hi, > > I have attached a fixed patch which fixes the problem on 5.18 Looks good to me, thanks Dylan! -- Jens Axboe