All of lore.kernel.org
 help / color / mirror / Atom feed
* FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree
@ 2022-07-04 13:24 gregkh
  2022-07-05 14:36 ` Dylan Yudaken
  0 siblings, 1 reply; 4+ messages in thread
From: gregkh @ 2022-07-04 13:24 UTC (permalink / raw)
  To: dylany, axboe; +Cc: stable


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@vger.kernel.org>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00 2001
From: Dylan Yudaken <dylany@fb.com>
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@fb.com>
Link: https://lore.kernel.org/r/20220630132006.2825668-1-dylany@fb.com
[axboe: ensure we don't half-import as well]
Signed-off-by: Jens Axboe <axboe@kernel.dk>

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


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree
  2022-07-04 13:24 FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree gregkh
@ 2022-07-05 14:36 ` Dylan Yudaken
  2022-07-05 14:38   ` Jens Axboe
  0 siblings, 1 reply; 4+ messages in thread
From: Dylan Yudaken @ 2022-07-05 14:36 UTC (permalink / raw)
  To: gregkh, axboe; +Cc: stable

[-- Attachment #1: Type: text/plain, Size: 2708 bytes --]

On Mon, 2022-07-04 at 15:24 +0200, gregkh@linuxfoundation.org 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@vger.kernel.org>.
> 
> thanks,
> 
> greg k-h
> 
> ------------------ original commit in Linus's tree ------------------
> 
> From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00
> 2001
> From: Dylan Yudaken <dylany@fb.com>
> 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@fb.com>
> Link:
> https://lore.kernel.org/r/20220630132006.2825668-1-dylany@fb.com
> [axboe: ensure we don't half-import as well]
> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> 
> 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

Thanks,
Dylan



[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-io_uring-fix-provided-buffer-import.patch --]
[-- Type: text/x-patch; name="0001-io_uring-fix-provided-buffer-import.patch", Size: 2159 bytes --]

From 48e76e81093dc2e4e7f2fd2d95f0a39c1078e7bd Mon Sep 17 00:00:00 2001
From: Dylan Yudaken <dylany@fb.com>
Date: Thu, 30 Jun 2022 06:20:06 -0700
Subject: [PATCH] io_uring: fix provided buffer import

commit 09007af2b627f0f195c6c53c4829b285cc3990ec upstream.

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@fb.com>
Link: https://lore.kernel.org/r/20220630132006.2825668-1-dylany@fb.com
[axboe: ensure we don't half-import as well]
Signed-off-by: Jens Axboe <axboe@kernel.dk>
---
 fs/io_uring.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/fs/io_uring.c b/fs/io_uring.c
index 7c190e885340..4d488ffb297c 100644
--- a/fs/io_uring.c
+++ b/fs/io_uring.c
@@ -3495,6 +3495,13 @@ static ssize_t io_iov_buffer_select(struct io_kiocb *req, struct iovec *iov,
 	return __io_iov_buffer_select(req, iov, issue_flags);
 }
 
+static inline bool io_do_buffer_select(struct io_kiocb *req)
+{
+	if (!(req->flags & REQ_F_BUFFER_SELECT))
+		return false;
+	return !(req->flags & REQ_F_BUFFER_SELECTED);
+}
+
 static struct iovec *__io_import_iovec(int rw, struct io_kiocb *req,
 				       struct io_rw_state *s,
 				       unsigned int issue_flags)
@@ -3854,18 +3861,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

base-commit: 64ef7e725db41552c219a155ab8c1f6caf2e7cb4
-- 
2.30.2


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree
  2022-07-05 14:36 ` Dylan Yudaken
@ 2022-07-05 14:38   ` Jens Axboe
  2022-07-07 18:06     ` gregkh
  0 siblings, 1 reply; 4+ messages in thread
From: Jens Axboe @ 2022-07-05 14:38 UTC (permalink / raw)
  To: Dylan Yudaken, gregkh; +Cc: stable

On 7/5/22 8:36 AM, Dylan Yudaken wrote:
> On Mon, 2022-07-04 at 15:24 +0200, gregkh@linuxfoundation.org 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@vger.kernel.org>.
>>
>> thanks,
>>
>> greg k-h
>>
>> ------------------ original commit in Linus's tree ------------------
>>
>> From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00
>> 2001
>> From: Dylan Yudaken <dylany@fb.com>
>> 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@fb.com>
>> Link:
>> https://lore.kernel.org/r/20220630132006.2825668-1-dylany@fb.com
>> [axboe: ensure we don't half-import as well]
>> Signed-off-by: Jens Axboe <axboe@kernel.dk>
>>
>> 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


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree
  2022-07-05 14:38   ` Jens Axboe
@ 2022-07-07 18:06     ` gregkh
  0 siblings, 0 replies; 4+ messages in thread
From: gregkh @ 2022-07-07 18:06 UTC (permalink / raw)
  To: Jens Axboe; +Cc: Dylan Yudaken, stable

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@linuxfoundation.org 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@vger.kernel.org>.
> >>
> >> thanks,
> >>
> >> greg k-h
> >>
> >> ------------------ original commit in Linus's tree ------------------
> >>
> >> From 09007af2b627f0f195c6c53c4829b285cc3990ec Mon Sep 17 00:00:00
> >> 2001
> >> From: Dylan Yudaken <dylany@fb.com>
> >> 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@fb.com>
> >> Link:
> >> https://lore.kernel.org/r/20220630132006.2825668-1-dylany@fb.com
> >> [axboe: ensure we don't half-import as well]
> >> Signed-off-by: Jens Axboe <axboe@kernel.dk>
> >>
> >> 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

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-07-07 18:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-04 13:24 FAILED: patch "[PATCH] io_uring: fix provided buffer import" failed to apply to 5.18-stable tree gregkh
2022-07-05 14:36 ` Dylan Yudaken
2022-07-05 14:38   ` Jens Axboe
2022-07-07 18:06     ` gregkh

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.