]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
io_uring/cmd: introduce IORING_URING_CMD_REISSUE flag
authorCaleb Sander Mateos <csander@purestorage.com>
Tue, 8 Jul 2025 20:22:10 +0000 (14:22 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 18 Jul 2025 18:34:56 +0000 (12:34 -0600)
Add a flag IORING_URING_CMD_REISSUE that ->uring_cmd() implementations
can use to tell whether this is the first or subsequent issue of the
uring_cmd. This will allow ->uring_cmd() implementations to store
information in the io_uring_cmd's pdu across issues.

Signed-off-by: Caleb Sander Mateos <csander@purestorage.com>
Acked-by: David Sterba <dsterba@suse.com>
Link: https://lore.kernel.org/r/20250708202212.2851548-3-csander@purestorage.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
include/linux/io_uring/cmd.h
io_uring/uring_cmd.c

index 53408124c1e50194770bdd0a4ae54781c60ba5aa..29892f54e0ac80f7b133700a18a064f4c9dfe3c7 100644 (file)
@@ -8,6 +8,8 @@
 
 /* only top 8 bits of sqe->uring_cmd_flags for kernel internal use */
 #define IORING_URING_CMD_CANCELABLE    (1U << 30)
+/* io_uring_cmd is being issued again */
+#define IORING_URING_CMD_REISSUE       (1U << 31)
 
 struct io_uring_cmd {
        struct file     *file;
index b228b84a510f6c746ff0f279bf154baf51212bc5..58964a2f8582bec4f14c26f47a99f8f200ee34d5 100644 (file)
@@ -261,7 +261,11 @@ int io_uring_cmd(struct io_kiocb *req, unsigned int issue_flags)
        }
 
        ret = file->f_op->uring_cmd(ioucmd, issue_flags);
-       if (ret == -EAGAIN || ret == -EIOCBQUEUED)
+       if (ret == -EAGAIN) {
+               ioucmd->flags |= IORING_URING_CMD_REISSUE;
+               return ret;
+       }
+       if (ret == -EIOCBQUEUED)
                return ret;
        if (ret < 0)
                req_set_fail(req);