From: Ming Lei <ming.lei@redhat.com>
To: Yoav Cohen <yoav@nvidia.com>
Cc: linux-block@vger.kernel.org, csander@purestorage.com,
jholzman@nvidia.com, omril@nvidia.com
Subject: Re: [PATCH v2 2/2] ublk: add UBLK_CMD_TRY_STOP_DEV command
Date: Tue, 6 Jan 2026 22:28:18 +0800 [thread overview]
Message-ID: <aV0cAkNxHRqxHMHg@fedora> (raw)
In-Reply-To: <20260104084839.30065-3-yoav@nvidia.com>
On Sun, Jan 04, 2026 at 10:48:39AM +0200, Yoav Cohen wrote:
> This command is similar to UBLK_CMD_STOP_DEV, but it only stops the
> device if there are no active openers for the ublk block device.
> If the device is busy, the command returns -EBUSY instead of
> disrupting active clients. This allows safe, non-destructive stopping.
>
> Signed-off-by: Yoav Cohen <yoav@nvidia.com>
> ---
> drivers/block/ublk_drv.c | 42 +++++++++++++++++++++++++++++++++++
> include/uapi/linux/ublk_cmd.h | 3 ++-
> 2 files changed, 44 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/block/ublk_drv.c b/drivers/block/ublk_drv.c
> index 2d5602ef05cc..55a5ab11c1cd 100644
> --- a/drivers/block/ublk_drv.c
> +++ b/drivers/block/ublk_drv.c
> @@ -54,6 +54,7 @@
> #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_CMD_QUIESCE_DEV _IOC_NR(UBLK_U_CMD_QUIESCE_DEV)
> +#define UBLK_CMD_TRY_STOP_DEV _IOC_NR(UBLK_U_CMD_TRY_STOP_DEV)
This need a feature flag, such as UBLK_F_SAFE_STOP, which is set in
ublk_ctrl_add_dev(), meantime document that UBLK_CMD_TRY_STOP_DEV is
supported with this feature.
>
> #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)
> @@ -239,6 +240,8 @@ struct ublk_device {
> struct delayed_work exit_work;
> struct work_struct partition_scan_work;
>
> + bool block_open; /* protected by open_mutex */
> +
> struct ublk_queue *queues[];
> };
>
> @@ -919,6 +922,9 @@ static int ublk_open(struct gendisk *disk, blk_mode_t mode)
> return -EPERM;
> }
>
> + if (ub->block_open)
> + return -EBUSY;
> +
> return 0;
> }
>
> @@ -3309,6 +3315,38 @@ static void ublk_ctrl_stop_dev(struct ublk_device *ub)
> ublk_stop_dev(ub);
> }
>
> +static int ublk_ctrl_try_stop_dev(struct ublk_device *ub)
> +{
> + struct gendisk *disk;
> + int ret = -EINVAL;
-EINVAL is never used, it may save the line of `ret = 0` if it is
initialized as 0.
> +
> + disk = ublk_get_disk(ub);
> + if (!disk) {
> + ret = -ENODEV;
> + goto out;
return -ENODEV;
Thanks,
Ming
prev parent reply other threads:[~2026-01-06 14:28 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-04 8:48 [PATCH v2 0/2] ublk: introduce UBLK_CMD_TRY_STOP_DEV Yoav Cohen
2026-01-04 8:48 ` [PATCH v2 1/2] ublk: make ublk_ctrl_stop_dev return void Yoav Cohen
2026-01-06 14:14 ` Ming Lei
2026-01-04 8:48 ` [PATCH v2 2/2] ublk: add UBLK_CMD_TRY_STOP_DEV command Yoav Cohen
2026-01-06 14:28 ` Ming Lei [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aV0cAkNxHRqxHMHg@fedora \
--to=ming.lei@redhat.com \
--cc=csander@purestorage.com \
--cc=jholzman@nvidia.com \
--cc=linux-block@vger.kernel.org \
--cc=omril@nvidia.com \
--cc=yoav@nvidia.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.