Skip to content

Commit 00b3b0d

Browse files
Ming Leiaxboe
authored andcommitted
ublk: add ublk_force_abort_dev()
Add ublk_force_abort_dev() for handling ublk_nosrv_dev_should_queue_io() in ublk_stop_dev(). Then queue quiesce and unquiesce can be paired in single function. Meantime not change device state to QUIESCED any more, since the disk is going to be removed soon. Reviewed-by: Uday Shankar <ushankar@purestorage.com> Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20250416035444.99569-3-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
1 parent b69b8ed commit 00b3b0d

File tree

1 file changed

+8
-13
lines changed

1 file changed

+8
-13
lines changed

drivers/block/ublk_drv.c

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1743,22 +1743,20 @@ static void __ublk_quiesce_dev(struct ublk_device *ub)
17431743
ub->dev_info.state = UBLK_S_DEV_QUIESCED;
17441744
}
17451745

1746-
static void ublk_unquiesce_dev(struct ublk_device *ub)
1746+
static void ublk_force_abort_dev(struct ublk_device *ub)
17471747
{
17481748
int i;
17491749

1750-
pr_devel("%s: unquiesce ub: dev_id %d state %s\n",
1750+
pr_devel("%s: force abort ub: dev_id %d state %s\n",
17511751
__func__, ub->dev_info.dev_id,
17521752
ub->dev_info.state == UBLK_S_DEV_LIVE ?
17531753
"LIVE" : "QUIESCED");
1754-
/* quiesce_work has run. We let requeued rqs be aborted
1755-
* before running fallback_wq. "force_abort" must be seen
1756-
* after request queue is unqiuesced. Then del_gendisk()
1757-
* can move on.
1758-
*/
1754+
blk_mq_quiesce_queue(ub->ub_disk->queue);
1755+
if (ub->dev_info.state == UBLK_S_DEV_LIVE)
1756+
ublk_wait_tagset_rqs_idle(ub);
1757+
17591758
for (i = 0; i < ub->dev_info.nr_hw_queues; i++)
17601759
ublk_get_queue(ub, i)->force_abort = true;
1761-
17621760
blk_mq_unquiesce_queue(ub->ub_disk->queue);
17631761
/* We may have requeued some rqs in ublk_quiesce_queue() */
17641762
blk_mq_kick_requeue_list(ub->ub_disk->queue);
@@ -1786,11 +1784,8 @@ static void ublk_stop_dev(struct ublk_device *ub)
17861784
mutex_lock(&ub->mutex);
17871785
if (ub->dev_info.state == UBLK_S_DEV_DEAD)
17881786
goto unlock;
1789-
if (ublk_nosrv_dev_should_queue_io(ub)) {
1790-
if (ub->dev_info.state == UBLK_S_DEV_LIVE)
1791-
__ublk_quiesce_dev(ub);
1792-
ublk_unquiesce_dev(ub);
1793-
}
1787+
if (ublk_nosrv_dev_should_queue_io(ub))
1788+
ublk_force_abort_dev(ub);
17941789
del_gendisk(ub->ub_disk);
17951790
disk = ublk_detach_disk(ub);
17961791
put_disk(disk);

0 commit comments

Comments
 (0)