On Mon, Feb 03, 2025 at 07:45:15AM -0800, Keith Busch wrote: > From: Keith Busch <kbusch@xxxxxxxxxx> > > Provide new operations for the user to request mapping an active request > to an io uring instance's buf_table. The user has to provide the index > it wants to install the buffer. > > A reference count is taken on the request to ensure it can't be > completed while it is active in a ring's buf_table. > > Signed-off-by: Keith Busch <kbusch@xxxxxxxxxx> > --- > drivers/block/ublk_drv.c | 139 +++++++++++++++++++++++++--------- > include/uapi/linux/ublk_cmd.h | 4 + > 2 files changed, 107 insertions(+), 36 deletions(-) > > diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c > index 529085181f355..58f224b5687b9 100644 > --- a/drivers/block/ublk_drv.c > +++ b/drivers/block/ublk_drv.c > @@ -51,6 +51,9 @@ > /* private ioctl command mirror */ > #define UBLK_CMD_DEL_DEV_ASYNC _IOC_NR(UBLK_U_CMD_DEL_DEV_ASYNC) > > +#define UBLK_IO_REGISTER_IO_BUF _IOC_NR(UBLK_U_IO_REGISTER_IO_BUF) > +#define UBLK_IO_UNREGISTER_IO_BUF _IOC_NR(UBLK_U_IO_UNREGISTER_IO_BUF) > + ... > @@ -1798,6 +1894,10 @@ static int __ublk_ch_uring_cmd(struct io_uring_cmd *cmd, > > ret = -EINVAL; > switch (_IOC_NR(cmd_op)) { > + case UBLK_IO_REGISTER_IO_BUF: > + return ublk_register_io_buf(cmd, ubq, tag, ub_cmd); > + case UBLK_IO_UNREGISTER_IO_BUF: > + return ublk_unregister_io_buf(cmd, ubq, tag, ub_cmd); Here IO_BUF is kernel buffer, we have to make sure that it won't be leaked. Such as application panic, how to un-register it? Thanks, Ming