On Tue, Jul 05, 2022 at 08:38:19AM -0600, Jens Axboe wrote: > 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! Now queued up, thanks. greg k-h