On Wed, Aug 14, 2024 at 6:46 PM Pavel Begunkov <asml.silence@xxxxxxxxx> wrote: > > Add ->uring_cmd callback for block device files and use it to implement > asynchronous discard. Normally, it first tries to execute the command > from non-blocking context, which we limit to a single bio because > otherwise one of sub-bios may need to wait for other bios, and we don't > want to deal with partial IO. If non-blocking attempt fails, we'll retry > it in a blocking context. > > Suggested-by: Conrad Meyer <conradmeyer@xxxxxxxx> > Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> > --- > block/blk.h | 1 + > block/fops.c | 2 + > block/ioctl.c | 94 +++++++++++++++++++++++++++++++++++++++++ > include/uapi/linux/fs.h | 2 + > 4 files changed, 99 insertions(+) > > diff --git a/block/blk.h b/block/blk.h > index e180863f918b..5178c5ba6852 100644 > --- a/block/blk.h > +++ b/block/blk.h > @@ -571,6 +571,7 @@ blk_mode_t file_to_blk_mode(struct file *file); > int truncate_bdev_range(struct block_device *bdev, blk_mode_t mode, > loff_t lstart, loff_t lend); > long blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); > +int blkdev_uring_cmd(struct io_uring_cmd *cmd, unsigned int issue_flags); > long compat_blkdev_ioctl(struct file *file, unsigned cmd, unsigned long arg); > > extern const struct address_space_operations def_blk_aops; > diff --git a/block/fops.c b/block/fops.c > index 9825c1713a49..8154b10b5abf 100644 > --- a/block/fops.c > +++ b/block/fops.c > @@ -17,6 +17,7 @@ > #include <linux/fs.h> > #include <linux/iomap.h> > #include <linux/module.h> > +#include <linux/io_uring/cmd.h> > #include "blk.h" > > static inline struct inode *bdev_file_inode(struct file *file) > @@ -873,6 +874,7 @@ const struct file_operations def_blk_fops = { > .splice_read = filemap_splice_read, > .splice_write = iter_file_splice_write, > .fallocate = blkdev_fallocate, > + .uring_cmd = blkdev_uring_cmd, Just be curious, we have IORING_OP_FALLOCATE already for sending discard to block device, why is .uring_cmd added for this purpose? Thanks,