* [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE [not found] <20250421105708.512852-1-jholzman@nvidia.com> @ 2025-04-21 10:59 ` Jared Holzman 2025-04-21 12:15 ` Ming Lei 2025-04-21 15:26 ` Jens Axboe 0 siblings, 2 replies; 4+ messages in thread From: Jared Holzman @ 2025-04-21 10:59 UTC (permalink / raw) To: linux-block@vger.kernel.org; +Cc: Ming Lei, Jens Axboe From: Omri Mann <omri@nvidia.com> Currently ublk only allows the size of the ublkb block device to be set via UBLK_CMD_SET_PARAMS before UBLK_CMD_START_DEV is triggered. This does not provide support for extendable user-space block devices without having to stop and restart the underlying ublkb block device causing IO interruption. This patch adds a new ublk command UBLK_U_CMD_UPDATE_SIZE to allow the ublk block device to be resized on-the-fly. Feature flag UBLK_F_UPDATE_SIZE is also added to indicate support. Signed-off-by: Omri Mann <omri@nvidia.com> --- drivers/block/ublk_drv.c | 19 ++++++++++++++++++- include/uapi/linux/ublk_cmd.h | 8 ++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c index 2de7b2bd409d..03653bd7a1df 100644 --- a/drivers/block/ublk_drv.c +++ b/drivers/block/ublk_drv.c @@ -50,6 +50,7 @@ /* private ioctl command mirror */ #define UBLK_CMD_DEL_DEV_ASYNC _IOC_NR(UBLK_U_CMD_DEL_DEV_ASYNC) +#define UBLK_CMD_UPDATE_SIZE _IOC_NR(UBLK_U_CMD_UPDATE_SIZE) #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) @@ -64,7 +65,8 @@ | UBLK_F_CMD_IOCTL_ENCODE \ | UBLK_F_USER_COPY \ | UBLK_F_ZONED \ - | UBLK_F_USER_RECOVERY_FAIL_IO) + | UBLK_F_USER_RECOVERY_FAIL_IO \ + | UBLK_F_UPDATE_SIZE) #define UBLK_F_ALL_RECOVERY_FLAGS (UBLK_F_USER_RECOVERY \ | UBLK_F_USER_RECOVERY_REISSUE \ @@ -3075,6 +3077,16 @@ static int ublk_ctrl_get_features(const struct ublksrv_ctrl_cmd *header) return 0; } +static void ublk_ctrl_set_size(struct ublk_device *ub, const struct ublksrv_ctrl_cmd *header) +{ + struct ublk_param_basic *p = &ub->params.basic; + u64 new_size = header->data[0]; + + mutex_lock(&ub->mutex); + p->dev_sectors = new_size; + set_capacity_and_notify(ub->ub_disk, p->dev_sectors); + mutex_unlock(&ub->mutex); +} /* * All control commands are sent via /dev/ublk-control, so we have to check * the destination device's permission @@ -3160,6 +3172,7 @@ static int ublk_ctrl_uring_cmd_permission(struct ublk_device *ub, case UBLK_CMD_SET_PARAMS: case UBLK_CMD_START_USER_RECOVERY: case UBLK_CMD_END_USER_RECOVERY: + case UBLK_CMD_UPDATE_SIZE: mask = MAY_READ | MAY_WRITE; break; default: @@ -3251,6 +3264,10 @@ static int ublk_ctrl_uring_cmd(struct io_uring_cmd *cmd, case UBLK_CMD_END_USER_RECOVERY: ret = ublk_ctrl_end_recovery(ub, header); break; + case UBLK_CMD_UPDATE_SIZE: + ublk_ctrl_set_size(ub, header); + ret = 0; + break; default: ret = -EOPNOTSUPP; break; diff --git a/include/uapi/linux/ublk_cmd.h b/include/uapi/linux/ublk_cmd.h index 583b86681c93..be5c6c6b16e0 100644 --- a/include/uapi/linux/ublk_cmd.h +++ b/include/uapi/linux/ublk_cmd.h @@ -51,6 +51,8 @@ _IOR('u', 0x13, struct ublksrv_ctrl_cmd) #define UBLK_U_CMD_DEL_DEV_ASYNC \ _IOR('u', 0x14, struct ublksrv_ctrl_cmd) +#define UBLK_U_CMD_UPDATE_SIZE \ + _IOWR('u', 0x15, struct ublksrv_ctrl_cmd) /* * 64bits are enough now, and it should be easy to extend in case of @@ -211,6 +213,12 @@ */ #define UBLK_F_USER_RECOVERY_FAIL_IO (1ULL << 9) +/* + * Resizing a block device is possible with UBLK_U_CMD_UPDATE_SIZE + * New size is passed in cmd->data[0] and is in units of sectors + */ +#define UBLK_F_UPDATE_SIZE (1ULL << 10) + /* device state */ #define UBLK_S_DEV_DEAD 0 #define UBLK_S_DEV_LIVE 1 -- 2.43.0 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE 2025-04-21 10:59 ` [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE Jared Holzman @ 2025-04-21 12:15 ` Ming Lei 2025-04-21 15:25 ` Jared Holzman 2025-04-21 15:26 ` Jens Axboe 1 sibling, 1 reply; 4+ messages in thread From: Ming Lei @ 2025-04-21 12:15 UTC (permalink / raw) To: Jared Holzman; +Cc: linux-block@vger.kernel.org, Jens Axboe On Mon, Apr 21, 2025 at 01:59:50PM +0300, Jared Holzman wrote: > > From: Omri Mann <omri@nvidia.com> > > Currently ublk only allows the size of the ublkb block device to be > set via UBLK_CMD_SET_PARAMS before UBLK_CMD_START_DEV is triggered. > > This does not provide support for extendable user-space block devices > without having to stop and restart the underlying ublkb block device > causing IO interruption. > > This patch adds a new ublk command UBLK_U_CMD_UPDATE_SIZE to allow the > ublk block device to be resized on-the-fly. > > Feature flag UBLK_F_UPDATE_SIZE is also added to indicate support. > > Signed-off-by: Omri Mann <omri@nvidia.com> Looks good, Reviewed-by: Ming Lei <ming.lei@redhat.com> Thanks, Ming ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE 2025-04-21 12:15 ` Ming Lei @ 2025-04-21 15:25 ` Jared Holzman 0 siblings, 0 replies; 4+ messages in thread From: Jared Holzman @ 2025-04-21 15:25 UTC (permalink / raw) To: Ming Lei; +Cc: linux-block@vger.kernel.org, Jens Axboe On 21/04/2025 15:15, Ming Lei wrote: > On Mon, Apr 21, 2025 at 01:59:50PM +0300, Jared Holzman wrote: >> >> From: Omri Mann <omri@nvidia.com> >> >> Currently ublk only allows the size of the ublkb block device to be >> set via UBLK_CMD_SET_PARAMS before UBLK_CMD_START_DEV is triggered. >> >> This does not provide support for extendable user-space block devices >> without having to stop and restart the underlying ublkb block device >> causing IO interruption. >> >> This patch adds a new ublk command UBLK_U_CMD_UPDATE_SIZE to allow the >> ublk block device to be resized on-the-fly. >> >> Feature flag UBLK_F_UPDATE_SIZE is also added to indicate support. >> >> Signed-off-by: Omri Mann <omri@nvidia.com> > > Looks good, > > Reviewed-by: Ming Lei <ming.lei@redhat.com> > > > Thanks, > Ming > Great. Anything more to do from my side? Can I expect to see it in 6.16? Thanks, Jared ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE 2025-04-21 10:59 ` [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE Jared Holzman 2025-04-21 12:15 ` Ming Lei @ 2025-04-21 15:26 ` Jens Axboe 1 sibling, 0 replies; 4+ messages in thread From: Jens Axboe @ 2025-04-21 15:26 UTC (permalink / raw) To: linux-block, Jared Holzman; +Cc: Ming Lei On Mon, 21 Apr 2025 13:59:50 +0300, Jared Holzman wrote: > Currently ublk only allows the size of the ublkb block device to be > set via UBLK_CMD_SET_PARAMS before UBLK_CMD_START_DEV is triggered. > > This does not provide support for extendable user-space block devices > without having to stop and restart the underlying ublkb block device > causing IO interruption. > > [...] Applied, thanks! [1/1] ublk: Add UBLK_U_CMD_UPDATE_SIZE commit: 98b995660bff011d8e00af03abd74ac7d1ac1390 Best regards, -- Jens Axboe ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-04-21 15:26 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250421105708.512852-1-jholzman@nvidia.com>
2025-04-21 10:59 ` [PATCH v6] ublk: Add UBLK_U_CMD_UPDATE_SIZE Jared Holzman
2025-04-21 12:15 ` Ming Lei
2025-04-21 15:25 ` Jared Holzman
2025-04-21 15:26 ` Jens Axboe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox