]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
io_uring/uring_cmd: fix hybrid polling initialization issue
authorhexue <xue01.he@samsung.com>
Mon, 12 May 2025 05:20:25 +0000 (13:20 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 22 May 2025 12:31:55 +0000 (14:31 +0200)
commit 63166b815dc163b2e46426cecf707dc5923d6d13 upstream.

Modify the check for whether the timer is initialized during IO transfer
when passthrough is used with hybrid polling, to ensure that it's always
setup correctly.

Cc: stable@vger.kernel.org
Fixes: 01ee194d1aba ("io_uring: add support for hybrid IOPOLL")
Signed-off-by: hexue <xue01.he@samsung.com>
Link: https://lore.kernel.org/r/20250512052025.293031-1-xue01.he@samsung.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
io_uring/uring_cmd.c

index e6701b7aa14743547ad91c429fd9d12df5314564..678a2f7d14fff44e31ca926c698df0dc40521fcd 100644 (file)
@@ -244,6 +244,11 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
                        return -EOPNOTSUPP;
                issue_flags |= IO_URING_F_IOPOLL;
                req->iopoll_completed = 0;
+               if (ctx->flags & IORING_SETUP_HYBRID_IOPOLL) {
+                       /* make sure every req only blocks once */
+                       req->flags &= ~REQ_F_IOPOLL_STATE;
+                       req->iopoll_start = ktime_get_ns();
+               }
        }
 
        ret = file->f_op->uring_cmd(ioucmd, issue_flags);