From: Linus Torvalds Date: Thu, 11 Jan 2024 22:19:23 +0000 (-0800) Subject: Merge tag 'for-6.8/io_uring-2024-01-08' of git://git.kernel.dk/linux X-Git-Tag: nvme-6.8-2023-02-08~129 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=4c72e2b8c42e57f65d8fbfb01329e79d2b450653;p=nvme.git Merge tag 'for-6.8/io_uring-2024-01-08' of git://git.kernel.dk/linux Pull io_uring updates from Jens Axboe: "Mostly just come fixes and cleanups, but one feature as well. In detail: - Harden the check for handling IOPOLL based on return (Pavel) - Various minor optimizations (Pavel) - Drop remnants of SCM_RIGHTS fd passing support, now that it's no longer supported since 6.7 (me) - Fix for a case where bytes_done wasn't initialized properly on a failure condition for read/write requests (me) - Move the register related code to a separate file (me) - Add support for returning the provided ring buffer head (me) - Add support for adding a direct descriptor to the normal file table (me, Christian Brauner) - Fix for ensuring pending task_work for a ring with DEFER_TASKRUN is run even if we timeout waiting (me)" * tag 'for-6.8/io_uring-2024-01-08' of git://git.kernel.dk/linux: io_uring: ensure local task_work is run on wait timeout io_uring/kbuf: add method for returning provided buffer ring head io_uring/rw: ensure io->bytes_done is always initialized io_uring: drop any code related to SCM_RIGHTS io_uring/unix: drop usage of io_uring socket io_uring/register: move io_uring_register(2) related code to register.c io_uring/openclose: add support for IORING_OP_FIXED_FD_INSTALL io_uring/cmd: inline io_uring_cmd_get_task io_uring/cmd: inline io_uring_cmd_do_in_task_lazy io_uring: split out cmd api into a separate header io_uring: optimise ltimeout for inline execution io_uring: don't check iopoll if request completes --- 4c72e2b8c42e57f65d8fbfb01329e79d2b450653 diff --cc include/linux/io_uring/cmd.h index 000000000000,d69b4038aa3e..e453a997c060 mode 000000,100644..100644 --- a/include/linux/io_uring/cmd.h +++ b/include/linux/io_uring/cmd.h @@@ -1,0 -1,82 +1,77 @@@ + /* SPDX-License-Identifier: GPL-2.0-or-later */ + #ifndef _LINUX_IO_URING_CMD_H + #define _LINUX_IO_URING_CMD_H + + #include + #include + + /* only top 8 bits of sqe->uring_cmd_flags for kernel internal use */ + #define IORING_URING_CMD_CANCELABLE (1U << 30) -#define IORING_URING_CMD_POLLED (1U << 31) + + struct io_uring_cmd { + struct file *file; + const struct io_uring_sqe *sqe; - union { - /* callback to defer completions to task context */ - void (*task_work_cb)(struct io_uring_cmd *cmd, unsigned); - /* used for polled completion */ - void *cookie; - }; ++ /* callback to defer completions to task context */ ++ void (*task_work_cb)(struct io_uring_cmd *cmd, unsigned); + u32 cmd_op; + u32 flags; + u8 pdu[32]; /* available inline for free use */ + }; + + static inline const void *io_uring_sqe_cmd(const struct io_uring_sqe *sqe) + { + return sqe->cmd; + } + + #if defined(CONFIG_IO_URING) + int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw, + struct iov_iter *iter, void *ioucmd); + void io_uring_cmd_done(struct io_uring_cmd *cmd, ssize_t ret, ssize_t res2, + unsigned issue_flags); + void __io_uring_cmd_do_in_task(struct io_uring_cmd *ioucmd, + void (*task_work_cb)(struct io_uring_cmd *, unsigned), + unsigned flags); + + void io_uring_cmd_mark_cancelable(struct io_uring_cmd *cmd, + unsigned int issue_flags); + + #else + static inline int io_uring_cmd_import_fixed(u64 ubuf, unsigned long len, int rw, + struct iov_iter *iter, void *ioucmd) + { + return -EOPNOTSUPP; + } + 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_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, + unsigned int issue_flags) + { + } + #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); + } + + 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 */ diff --cc security/selinux/hooks.c index 1e4b1f940caf,17ec5e109aec..a6bf90ace84c --- a/security/selinux/hooks.c +++ b/security/selinux/hooks.c @@@ -92,8 -91,7 +92,8 @@@ #include #include #include - #include + #include +#include #include "avc.h" #include "objsec.h" diff --cc security/smack/smack_lsm.c index eb465bf74a3c,2cdaa46088a0..0fdbf04cc258 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c @@@ -43,8 -42,7 +43,8 @@@ #include #include #include - #include + #include +#include #include "smack.h" #define TRANS_TRUE "TRUE"