]> www.infradead.org Git - users/hch/misc.git/commitdiff
block: move sched debugfs register into elvevator_register_queue
authorMing Lei <ming.lei@redhat.com>
Mon, 5 May 2025 14:17:44 +0000 (22:17 +0800)
committerJens Axboe <axboe@kernel.dk>
Tue, 6 May 2025 13:43:42 +0000 (07:43 -0600)
sched debugfs shares same lifetime with scheduler's kobject, and same
lock(elevator lock), so move sched debugfs register/unregister into
elevator_register_queue() and elevator_unregister_queue().

Then we needn't blk_mq_debugfs_register() for us to register sched
debugfs any more.

Reviewed-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Nilay Shroff <nilay@linux.ibm.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Ming Lei <ming.lei@redhat.com>
Link: https://lore.kernel.org/r/20250505141805.2751237-7-ming.lei@redhat.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq-debugfs.c
block/blk-mq-sched.c
block/elevator.c
block/elevator.h

index 7710c409e4329cc2ef30bb6b739f8241f6e55e46..2837a8ce8054236bf2bcff1ea67e5eed3f2d04a8 100644 (file)
@@ -625,20 +625,9 @@ void blk_mq_debugfs_register(struct request_queue *q)
 
        debugfs_create_files(q->debugfs_dir, q, blk_mq_debugfs_queue_attrs);
 
-       /*
-        * blk_mq_init_sched() attempted to do this already, but q->debugfs_dir
-        * didn't exist yet (because we don't know what to name the directory
-        * until the queue is registered to a gendisk).
-        */
-       if (q->elevator && !q->sched_debugfs_dir)
-               blk_mq_debugfs_register_sched(q);
-
-       /* Similarly, blk_mq_init_hctx() couldn't do this previously. */
        queue_for_each_hw_ctx(q, hctx, i) {
                if (!hctx->debugfs_dir)
                        blk_mq_debugfs_register_hctx(q, hctx);
-               if (q->elevator && !hctx->sched_debugfs_dir)
-                       blk_mq_debugfs_register_sched_hctx(q, hctx);
        }
 
        if (q->rq_qos) {
index 2abc5e0704e8864d9a7e01d34e3a7825a1035784..336a15ffecfa7ce7334cd5767cf9b49cf7815065 100644 (file)
@@ -434,7 +434,7 @@ static int blk_mq_init_sched_shared_tags(struct request_queue *queue)
        return 0;
 }
 
-static void blk_mq_sched_reg_debugfs(struct request_queue *q)
+void blk_mq_sched_reg_debugfs(struct request_queue *q)
 {
        struct blk_mq_hw_ctx *hctx;
        unsigned long i;
@@ -446,7 +446,7 @@ static void blk_mq_sched_reg_debugfs(struct request_queue *q)
        mutex_unlock(&q->debugfs_mutex);
 }
 
-static void blk_mq_sched_unreg_debugfs(struct request_queue *q)
+void blk_mq_sched_unreg_debugfs(struct request_queue *q)
 {
        struct blk_mq_hw_ctx *hctx;
        unsigned long i;
@@ -503,10 +503,6 @@ int blk_mq_init_sched(struct request_queue *q, struct elevator_type *e)
                        }
                }
        }
-
-       /* sched is initialized, it is ready to export it via debugfs */
-       blk_mq_sched_reg_debugfs(q);
-
        return 0;
 
 err_free_map_and_rqs:
@@ -544,9 +540,6 @@ void blk_mq_exit_sched(struct request_queue *q, struct elevator_queue *e)
        unsigned long i;
        unsigned int flags = 0;
 
-       /* unexport via debugfs before exiting sched */
-       blk_mq_sched_unreg_debugfs(q);
-
        queue_for_each_hw_ctx(q, hctx, i) {
                if (e->type->ops.exit_hctx && hctx->sched_data) {
                        e->type->ops.exit_hctx(hctx, i);
index b328155948920a56fb19215f8bd4acfc303f3a30..4400eb8fe54f1ec55d2082f048f51da292eec51b 100644 (file)
@@ -472,6 +472,11 @@ int elv_register_queue(struct request_queue *q, bool uevent)
                if (uevent)
                        kobject_uevent(&e->kobj, KOBJ_ADD);
 
+               /*
+                * Sched is initialized, it is ready to export it via
+                * debugfs
+                */
+               blk_mq_sched_reg_debugfs(q);
                set_bit(ELEVATOR_FLAG_REGISTERED, &e->flags);
        }
        return error;
@@ -486,6 +491,9 @@ void elv_unregister_queue(struct request_queue *q)
        if (e && test_and_clear_bit(ELEVATOR_FLAG_REGISTERED, &e->flags)) {
                kobject_uevent(&e->kobj, KOBJ_REMOVE);
                kobject_del(&e->kobj);
+
+               /* unexport via debugfs before exiting sched */
+               blk_mq_sched_unreg_debugfs(q);
        }
 }
 
index e27af5492cdbb237265385e5e8dcdbb672b8b988..9198676644a9bffc3ced1f027a50a295a63d6d32 100644 (file)
@@ -181,4 +181,7 @@ extern struct request *elv_rb_find(struct rb_root *, sector_t);
 #define rq_entry_fifo(ptr)     list_entry((ptr), struct request, queuelist)
 #define rq_fifo_clear(rq)      list_del_init(&(rq)->queuelist)
 
+void blk_mq_sched_reg_debugfs(struct request_queue *q);
+void blk_mq_sched_unreg_debugfs(struct request_queue *q);
+
 #endif /* _ELEVATOR_H */