Merge tag 'for-6.8/io_uring-2024-01-08' of git://git.kernel.dk/linux
authorLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Jan 2024 22:19:23 +0000 (14:19 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Thu, 11 Jan 2024 22:19:23 +0000 (14:19 -0800)
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

1  2 
MAINTAINERS
drivers/block/ublk_drv.c
drivers/nvme/host/ioctl.c
include/linux/io_uring/cmd.h
include/linux/io_uring_types.h
io_uring/io_uring.c
io_uring/uring_cmd.c
security/selinux/hooks.c
security/smack/smack_lsm.c

diff --cc MAINTAINERS
Simple merge
Simple merge
Simple merge
index 0000000000000000000000000000000000000000,d69b4038aa3e5360bd82f189ad68f2966a0d59ba..e453a997c0605330f3ce2ea2c61368417f017851
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,82 +1,77 @@@
 -#define IORING_URING_CMD_POLLED               (1U << 31)
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ #ifndef _LINUX_IO_URING_CMD_H
+ #define _LINUX_IO_URING_CMD_H
+ #include <uapi/linux/io_uring.h>
+ #include <linux/io_uring_types.h>
+ /* only top 8 bits of sqe->uring_cmd_flags for kernel internal use */
+ #define IORING_URING_CMD_CANCELABLE   (1U << 30)
 -      union {
 -              /* callback to defer completions to task context */
 -              void (*task_work_cb)(struct io_uring_cmd *cmd, unsigned);
 -              /* used for polled completion */
 -              void *cookie;
 -      };
+ struct io_uring_cmd {
+       struct file     *file;
+       const struct io_uring_sqe *sqe;
++      /* 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 */
Simple merge
Simple merge
Simple merge
index 1e4b1f940caf51620ff97664ce8f8fce53ae0c53,17ec5e109aec79e8b81c5a79d7291afbe3145352..a6bf90ace84c74bdb11330d7bb278183dfb13275
@@@ -92,8 -91,7 +92,8 @@@
  #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 <uapi/linux/lsm.h>
  
  #include "avc.h"
  #include "objsec.h"
index eb465bf74a3c96af081b977c010b0945acf1ba9b,2cdaa46088a020351b0fa91f114886cda751e26d..0fdbf04cc25835801995b6ffda190e97afc978ce
@@@ -43,8 -42,7 +43,8 @@@
  #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 <uapi/linux/lsm.h>
  #include "smack.h"
  
  #define TRANS_TRUE    "TRUE"