Skip to content

Commit 3191813

Browse files
author
Ming Lei
committed
block: fold elevator_disable into elevator_switch
JIRA: https://issues.redhat.com/browse/RHEL-106845 commit 1bb7fba Author: Christoph Hellwig <hch@lst.de> Date: Mon May 5 22:17:49 2025 +0800 block: fold elevator_disable into elevator_switch This removes duplicate code, and keeps the callers tidy. Reviewed-by: Nilay Shroff <nilay@linux.ibm.com> Reviewed-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Ming Lei <ming.lei@redhat.com> Link: https://lore.kernel.org/r/20250505141805.2751237-12-ming.lei@redhat.com Signed-off-by: Jens Axboe <axboe@kernel.dk> Signed-off-by: Ming Lei <ming.lei@redhat.com>
1 parent 00ed996 commit 3191813

File tree

1 file changed

+23
-38
lines changed

1 file changed

+23
-38
lines changed

block/elevator.c

Lines changed: 23 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -623,15 +623,17 @@ void elevator_init_mq(struct request_queue *q)
623623
*/
624624
int elevator_switch(struct request_queue *q, const char *name)
625625
{
626-
struct elevator_type *new_e;
627-
int ret;
626+
struct elevator_type *new_e = NULL;
627+
int ret = 0;
628628

629629
WARN_ON_ONCE(q->mq_freeze_depth == 0);
630630
lockdep_assert_held(&q->elevator_lock);
631631

632-
new_e = elevator_find_get(name);
633-
if (!new_e)
634-
return -EINVAL;
632+
if (strncmp(name, "none", 4)) {
633+
new_e = elevator_find_get(name);
634+
if (!new_e)
635+
return -EINVAL;
636+
}
635637

636638
blk_mq_quiesce_queue(q);
637639

@@ -640,16 +642,21 @@ int elevator_switch(struct request_queue *q, const char *name)
640642
elevator_exit(q);
641643
}
642644

643-
ret = blk_mq_init_sched(q, new_e);
644-
if (ret)
645-
goto out_unfreeze;
646-
647-
ret = elv_register_queue(q, true);
648-
if (ret) {
649-
elevator_exit(q);
650-
goto out_unfreeze;
645+
if (new_e) {
646+
ret = blk_mq_init_sched(q, new_e);
647+
if (ret)
648+
goto out_unfreeze;
649+
ret = elv_register_queue(q, true);
650+
if (ret) {
651+
elevator_exit(q);
652+
goto out_unfreeze;
653+
}
654+
} else {
655+
blk_queue_flag_clear(QUEUE_FLAG_SQ_SCHED, q);
656+
q->elevator = NULL;
657+
q->nr_requests = q->tag_set->queue_depth;
651658
}
652-
blk_add_trace_msg(q, "elv switch: %s", new_e->elevator_name);
659+
blk_add_trace_msg(q, "elv switch: %s", name);
653660

654661
out_unfreeze:
655662
blk_mq_unquiesce_queue(q);
@@ -659,27 +666,11 @@ int elevator_switch(struct request_queue *q, const char *name)
659666
new_e->elevator_name);
660667
}
661668

662-
elevator_put(new_e);
669+
if (new_e)
670+
elevator_put(new_e);
663671
return ret;
664672
}
665673

666-
void elevator_disable(struct request_queue *q)
667-
{
668-
WARN_ON_ONCE(q->mq_freeze_depth == 0);
669-
lockdep_assert_held(&q->elevator_lock);
670-
671-
blk_mq_quiesce_queue(q);
672-
673-
elv_unregister_queue(q);
674-
elevator_exit(q);
675-
blk_queue_flag_clear(QUEUE_FLAG_SQ_SCHED, q);
676-
q->elevator = NULL;
677-
q->nr_requests = q->tag_set->queue_depth;
678-
blk_add_trace_msg(q, "elv switch: none");
679-
680-
blk_mq_unquiesce_queue(q);
681-
}
682-
683674
/*
684675
* Switch this queue to the given IO scheduler.
685676
*/
@@ -689,12 +680,6 @@ static int elevator_change(struct request_queue *q, const char *elevator_name)
689680
if (!blk_queue_registered(q))
690681
return -ENOENT;
691682

692-
if (!strncmp(elevator_name, "none", 4)) {
693-
if (q->elevator)
694-
elevator_disable(q);
695-
return 0;
696-
}
697-
698683
if (q->elevator && elevator_match(q->elevator->type, elevator_name))
699684
return 0;
700685

0 commit comments

Comments
 (0)