clean up io_uring cmd header structure
Subsystems (7)
v2 cover clean up io_uring cmd header structure
Looking at the zc rfc, and how we tend to stuff everything into linux/io_uring, start splitting the file before it becomes even more monstrous.
V2: fix up includes for security/
Add new files to MAINTAINERS
Pavel Begunkov (3):
io_uring: split out cmd api into a separate header io_uring/cmd: inline io_uring_cmd_do_in_task_lazy io_uring/cmd: inline io_uring_cmd_get_task
MAINTAINERS | 1 + drivers/block/ublk_drv.c | 2 +- drivers/nvme/host/ioctl.c | 2 +- include/linux/io_uring.h | 89 +--------------------------------- include/linux/io_uring/cmd.h | 82 +++++++++++++++++++++++++++++++ include/linux/io_uring_types.h | 31 ++++++++++++ io_uring/io_uring.c | 1 + io_uring/io_uring.h | 10 ---- io_uring/rw.c | 2 +- io_uring/uring_cmd.c | 15 +----- security/selinux/hooks.c | 2 +- security/smack/smack_lsm.c | 2 +- 12 files changed, 122 insertions(+), 117 deletions(-) create mode 100644 include/linux/io_uring/cmd.h
Signature · 1 line
2.43.0
PATCH v2 1/3 io_uring: split out cmd api into a separate header
linux/io_uring.h is slowly becoming a rubbish bin where we put anything exposed to other subsystems. For instance, the task exit hooks and io_uring cmd infra are completely orthogonal and don't need each other's definitions. Start cleaning it up by splitting out all command bits into a new header file.
--- MAINTAINERS | 1 + drivers/block/ublk_drv.c | 2 +- drivers/nvme/host/ioctl.c | 2 +- include/linux/io_uring.h | 89 +--------------------------------- include/linux/io_uring/cmd.h | 81 +++++++++++++++++++++++++++++++ include/linux/io_uring_types.h | 20 ++++++++ io_uring/io_uring.c | 1 + io_uring/rw.c | 2 +- io_uring/uring_cmd.c | 2 +- security/selinux/hooks.c | 2 +- security/smack/smack_lsm.c | 2 +- 11 files changed, 110 insertions(+), 94 deletions(-) create mode 100644 include/linux/io_uring/cmd.h
MAINTAINERS +1 -0
@@ -11157,6 +11157,7 @@ L: [email protected] S: Maintained T: git git://git.kernel.dk/linux-block T: git git://git.kernel.dk/liburing +F: include/linux/io_uring/ F: include/linux/io_uring.h F: include/linux/io_uring_types.h F: include/trace/events/io_uring.h
drivers/block/ublk_drv.c +1 -1
@@ -36,7 +36,7 @@#include <linux/sched/mm.h> #include <linux/uaccess.h> #include <linux/cdev.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include <linux/blk-mq.h> #include <linux/delay.h> #include <linux/mm.h>
drivers/nvme/host/ioctl.c +1 -1
@@ -5,7 +5,7 @@*/ #include <linux/ptrace.h> /* for force_successful_syscall_return */ #include <linux/nvme_ioctl.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include "nvme.h" enum {
include/linux/io_uring.h +1 -88
114 lines not on this page · raw message
include/linux/io_uring/cmd.h new file +81 -0
81 lines not on this page · raw message
include/linux/io_uring_types.h +20 -0
@@ -7,6 +7,26 @@#include <linux/llist.h> #include <uapi/linux/io_uring.h> +enum io_uring_cmd_flags { +IO_URING_F_COMPLETE_DEFER =1 , +IO_URING_F_UNLOCKED =2 , +/* the request is executed from poll, it should not be freed */ +IO_URING_F_MULTISHOT =4 , +/* executed by io-wq */ +IO_URING_F_IOWQ =8 , +/* int's last bit, sign checks are usually faster than a bit test */ +IO_URING_F_NONBLOCK =INT_MIN , + +/* ctx state flags, for URING_CMD */ +IO_URING_F_SQE128 = (1 <<8 ), +IO_URING_F_CQE32 = (1 <<9 ), +IO_URING_F_IOPOLL = (1 <<10 ), + +/* set when uring wants to cancel a previously issued command */ +IO_URING_F_CANCEL = (1 <<11 ), +IO_URING_F_COMPAT = (1 <<12 ), +}; +struct io_wq_work_node {struct io_wq_work_node *next; };
io_uring/io_uring.c +1 -0
@@ -70,6 +70,7 @@#include <linux/fadvise.h> #include <linux/task_work.h> #include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include <linux/audit.h> #include <linux/security.h> #include <asm/shmparam.h>
io_uring/rw.c +1 -1
@@ -10,7 +10,7 @@#include <linux/poll.h> #include <linux/nospec.h> #include <linux/compat.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include <uapi/linux/io_uring.h>
io_uring/uring_cmd.c +1 -1
@@ -2,7 +2,7 @@#include <linux/kernel.h> #include <linux/errno.h> #include <linux/file.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include <linux/security.h> #include <linux/nospec.h>
security/selinux/hooks.c +1 -1
@@ -91,7 +91,7 @@#include <uapi/linux/mount.h> #include <linux/fsnotify.h> #include <linux/fanotify.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include "avc.h" #include "objsec.h"
security/smack/smack_lsm.c +1 -1
@@ -42,7 +42,7 @@#include <linux/fs_context.h> #include <linux/fs_parser.h> #include <linux/watch_queue.h> -#include <linux/io_uring.h> +#include <linux/io_uring/cmd.h> #include "smack.h" #define TRANS_TRUE "TRUE"
Signature · 1 line
2.43.0
Re: [PATCH v2 1/3] io_uring: split out cmd api into a separate header
Quoted 7 lines · Pavel Begunkov
linux/io_uring.his slowly becoming a rubbish bin where we put anything exposed to other subsystems. For instance, the task exit hooks andio_uringcmd infra are completely orthogonal and don't need each other's definitions. Start cleaning it up by splitting out all command bits into a new header file.Signed-off-by Pavel Begunkov <[email protected]>
Looks fine,
Thanks,
Ming
PATCH v2 2/3 io_uring/cmd: inline io_uring_cmd_do_in_task_lazy
In reply to Pavel BegunkovNow as we can easily include io_uring_types.h, move IOU_F_TWQ_LAZY_WAKE and inline io_uring_cmd_do_in_task_lazy().
--- include/linux/io_uring/cmd.h | 31 ++++++++++++++++--------------- include/linux/io_uring_types.h | 11 +++++++++++ io_uring/io_uring.h | 10 ---------- io_uring/uring_cmd.c | 7 ------- 4 files changed, 27 insertions(+), 32 deletions(-)
include/linux/io_uring/cmd.h +16 -15
@@ -36,15 +36,6 @@ void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t res2,void __io_uring_cmd_do_in_task (struct io_uring_cmd *ioucmd,void (*task_work_cb)(struct io_uring_cmd *,unsigned ),unsigned flags); -/* users should follow semantics of IOU_F_TWQ_LAZY_WAKE */ -void io_uring_cmd_do_in_task_lazy (struct io_uring_cmd *ioucmd, -void (*task_work_cb)(struct io_uring_cmd *,unsigned )); - -static inline void io_uring_cmd_complete_in_task (struct io_uring_cmd *ioucmd, -void (*task_work_cb)(struct io_uring_cmd *,unsigned )) -{ -__io_uring_cmd_do_in_task (ioucmd, task_work_cb,0 ); -}void io_uring_cmd_mark_cancelable (struct io_uring_cmd *cmd,unsigned int issue_flags);
@@ -60,12 +51,9 @@ static inline void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t ret2, unsigned issue_flags) { } -static inline void io_uring_cmd_complete_in_task (struct io_uring_cmd *ioucmd, -void (*task_work_cb)(struct io_uring_cmd *,unsigned )) -{ -} -static inline void io_uring_cmd_do_in_task_lazy (struct io_uring_cmd *ioucmd, -void (*task_work_cb)(struct io_uring_cmd *,unsigned )) +static inline void __io_uring_cmd_do_in_task (struct io_uring_cmd *ioucmd, +void (*task_work_cb)(struct io_uring_cmd *,unsigned ), +unsigned flags) { } static inline void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd,
@@ -78,4 +66,17 @@ static inline struct task_struct *io_uring_cmd_get_task(struct io_uring_cmd *cmd }#endif +/* users must follow the IOU_F_TWQ_LAZY_WAKE semantics */ +static inline void io_uring_cmd_do_in_task_lazy (struct io_uring_cmd *ioucmd, +void (*task_work_cb)(struct io_uring_cmd *,unsigned )) +{ +__io_uring_cmd_do_in_task (ioucmd, task_work_cb,IOU_F_TWQ_LAZY_WAKE ); +} + +static inline void io_uring_cmd_complete_in_task (struct io_uring_cmd *ioucmd, +void (*task_work_cb)(struct io_uring_cmd *,unsigned )) +{ +__io_uring_cmd_do_in_task (ioucmd, task_work_cb,0 ); +} +#endif /* _LINUX_IO_URING_CMD_H */
include/linux/io_uring_types.h +11 -0
@@ -7,6 +7,17 @@#include <linux/llist.h> #include <uapi/linux/io_uring.h> +enum { +/* +* A hint to not wake right away but delay until there are enough of +* tw's queued to match the number of CQEs the task is waiting for. +* +* Must not be used wirh requests generating more than one CQE. +* It's also ignored unless IORING_SETUP_DEFER_TASKRUN is set. +*/ +IOU_F_TWQ_LAZY_WAKE =1 , +}; +enum io_uring_cmd_flags {IO_URING_F_COMPLETE_DEFER =1 ,IO_URING_F_UNLOCKED =2 ,
io_uring/io_uring.h +0 -10
@@ -15,16 +15,6 @@#include <trace/events/io_uring.h> #endif -enum { -/* -* A hint to not wake right away but delay until there are enough of -* tw's queued to match the number of CQEs the task is waiting for. -* -* Must not be used wirh requests generating more than one CQE. -* It's also ignored unless IORING_SETUP_DEFER_TASKRUN is set. -*/ -IOU_F_TWQ_LAZY_WAKE =1 , -};enum {IOU_OK =0 ,
io_uring/uring_cmd.c +0 -7
@@ -78,13 +78,6 @@ void __io_uring_cmd_do_in_task(struct io_uring_cmd *ioucmd, }EXPORT_SYMBOL_GPL (__io_uring_cmd_do_in_task); -void io_uring_cmd_do_in_task_lazy (struct io_uring_cmd *ioucmd, -void (*task_work_cb)(struct io_uring_cmd *,unsigned )) -{ -__io_uring_cmd_do_in_task (ioucmd, task_work_cb,IOU_F_TWQ_LAZY_WAKE ); -} -EXPORT_SYMBOL_GPL (io_uring_cmd_do_in_task_lazy); -static inline void io_req_set_cqe32_extra (struct io_kiocb *req,u64 extra1,u64 extra2) {
Signature · 1 line
2.43.0
Re: [PATCH v2 2/3] io_uring/cmd: inline io_uring_cmd_do_in_task_lazy
Quoted 4 lines · Pavel Begunkov
Now as we can easily include
io_uring_types.h, moveIOU_F_TWQ_LAZY_WAKEand inlineio_uring_cmd_do_in_task_lazy().Signed-off-by Pavel Begunkov <[email protected]>
Thanks,
Ming
PATCH v2 3/3 io_uring/cmd: inline io_uring_cmd_get_task
In reply to Pavel BegunkovWith io_uring_types.h we see all required definitions to inline io_uring_cmd_get_task().
--- include/linux/io_uring/cmd.h | 10 +++++----- io_uring/uring_cmd.c | 6 ------ 2 files changed, 5 insertions(+), 11 deletions(-)
include/linux/io_uring/cmd.h +5 -5
@@ -39,7 +39,6 @@ void __io_uring_cmd_do_in_task(struct io_uring_cmd *ioucmd,void io_uring_cmd_mark_cancelable (struct io_uring_cmd *cmd,unsigned int issue_flags); -struct task_struct *io_uring_cmd_get_task (struct io_uring_cmd *cmd);#else static inline int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw,
@@ -60,10 +59,6 @@ static inline void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd, unsigned int issue_flags) { } -static inline struct task_struct *io_uring_cmd_get_task (struct io_uring_cmd *cmd) -{ -return NULL ; -}#endif /* users must follow the IOU_F_TWQ_LAZY_WAKE semantics */
@@ -79,4 +74,9 @@ static inline void io_uring_cmd_complete_in_task(struct io_uring_cmd *ioucmd, __io_uring_cmd_do_in_task(ioucmd, task_work_cb, 0); } +static inline struct task_struct *io_uring_cmd_get_task (struct io_uring_cmd *cmd) +{ +return cmd_to_io_kiocb (cmd)->task; +} +#endif /* _LINUX_IO_URING_CMD_H */
io_uring/uring_cmd.c +0 -6
@@ -52,12 +52,6 @@ void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd, }EXPORT_SYMBOL_GPL (io_uring_cmd_mark_cancelable); -struct task_struct *io_uring_cmd_get_task (struct io_uring_cmd *cmd) -{ -return cmd_to_io_kiocb (cmd)->task; -} -EXPORT_SYMBOL_GPL (io_uring_cmd_get_task); -static void io_uring_cmd_work (struct io_kiocb *req,struct io_tw_state *ts) { struct io_uring_cmd *ioucmd = io_kiocb_to_cmd(req, struct io_uring_cmd);
Signature · 1 line
2.43.0
Re: [PATCH v2 3/3] io_uring/cmd: inline io_uring_cmd_get_task
Quoted 4 lines · Pavel Begunkov
With
io_uring_types.hwe see all required definitions to inlineio_uring_cmd_get_task().Signed-off-by Pavel Begunkov <[email protected]>
Thanks,
Ming
Quoted 8 lines · Pavel Begunkov
Looking at the zc rfc, and how we tend to stuff everything into linux/io_uring, start splitting the file before it becomes even more monstrous.
V2: fix up includes for
security/
Add new files toMAINTAINERS[...]
Applied, thanks!
[1/3] io_uring: split out cmd api into a separate header
(no commit info)
[2/3] io_uring/cmd: inline io_uring_cmd_do_in_task_lazy
(no commit info)
[3/3] io_uring/cmd: inline io_uring_cmd_get_task
(no commit info)
Best regards,
Signature · 1 line
Jens Axboe