--- /dev/null
+From a2d2bad7485d2af8dc564c8565839b23a3f8205d Mon Sep 17 00:00:00 2001
+From: Jens Axboe <axboe@kernel.dk>
+Date: Wed, 20 Aug 2025 20:03:35 -0600
+Subject: io_uring/rw: recycle buffers manually for non-mshot reads
+
+From: Jens Axboe <axboe@kernel.dk>
+
+Commit d8e1dec2f860ee40623609aa6c4f22e1ee45605d upstream.
+
+The mshot side of reads already does this, but the regular read path
+does not. This leads to needing recycling checks sprinkled in various
+spots in the "go async" path, like arming poll. In preparation for
+getting rid of those, ensure that read recycles appropriately.
+
+Link: https://lore.kernel.org/r/20250821020750.598432-8-axboe@kernel.dk
+Signed-off-by: Jens Axboe <axboe@kernel.dk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ io_uring/rw.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/io_uring/rw.c
++++ b/io_uring/rw.c
+@@ -953,6 +953,8 @@ int io_read(struct io_kiocb *req, unsign
+ if (ret >= 0)
+ return kiocb_done(req, ret, issue_flags);
+
++ if (req->flags & REQ_F_BUFFERS_COMMIT)
++ io_kbuf_recycle(req, issue_flags);
+ return ret;
+ }
+