]> www.infradead.org Git - nvme.git/commitdiff
ublk: remove __ublk_quiesce_dev()
authorMing Lei <ming.lei@redhat.com>
Wed, 16 Apr 2025 03:54:40 +0000 (11:54 +0800)
committerJens Axboe <axboe@kernel.dk>
Thu, 17 Apr 2025 01:33:21 +0000 (19:33 -0600)
Remove __ublk_quiesce_dev() and open code for updating device state as
QUIESCED.

We needn't to drain inflight requests in __ublk_quiesce_dev() any more,
because all inflight requests are aborted in ublk char device release
handler.

Also we needn't to set ->canceling in __ublk_quiesce_dev() any more
because it is done unconditionally now in ublk_ch_release().

Reviewed-by: Uday Shankar <ushankar@purestorage.com>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250416035444.99569-7-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/block/ublk_drv.c

index b0a7e5acb2eb1c95da9e4541f04f6d671cad6b33..bf708e9e9a126982991618371700aef24b171dd1 100644 (file)
@@ -209,7 +209,6 @@ struct ublk_params_header {
 
 static void ublk_stop_dev_unlocked(struct ublk_device *ub);
 static void ublk_abort_queue(struct ublk_device *ub, struct ublk_queue *ubq);
-static void __ublk_quiesce_dev(struct ublk_device *ub);
 static inline struct request *__ublk_check_and_get_req(struct ublk_device *ub,
                struct ublk_queue *ubq, int tag, size_t offset);
 static inline unsigned int ublk_req_build_flags(struct request *req);
@@ -1586,7 +1585,8 @@ static int ublk_ch_release(struct inode *inode, struct file *filp)
                ublk_stop_dev_unlocked(ub);
        } else {
                if (ublk_nosrv_dev_should_queue_io(ub)) {
-                       __ublk_quiesce_dev(ub);
+                       /* ->canceling is set and all requests are aborted */
+                       ub->dev_info.state = UBLK_S_DEV_QUIESCED;
                } else {
                        ub->dev_info.state = UBLK_S_DEV_FAIL_IO;
                        for (i = 0; i < ub->dev_info.nr_hw_queues; i++)
@@ -1832,21 +1832,6 @@ static void ublk_wait_tagset_rqs_idle(struct ublk_device *ub)
        }
 }
 
-static void __ublk_quiesce_dev(struct ublk_device *ub)
-{
-       int i;
-
-       pr_devel("%s: quiesce ub: dev_id %d state %s\n",
-                       __func__, ub->dev_info.dev_id,
-                       ub->dev_info.state == UBLK_S_DEV_LIVE ?
-                       "LIVE" : "QUIESCED");
-       /* mark every queue as canceling */
-       for (i = 0; i < ub->dev_info.nr_hw_queues; i++)
-               ublk_get_queue(ub, i)->canceling = true;
-       ublk_wait_tagset_rqs_idle(ub);
-       ub->dev_info.state = UBLK_S_DEV_QUIESCED;
-}
-
 static void ublk_force_abort_dev(struct ublk_device *ub)
 {
        int i;