Commit 81eaca44 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Jens Axboe

block: cleanup elevator_get

Do the request_module and repeated lookup in the only caller that cares,
pick a saner name that explains where are actually doing a lookup and
use a sane calling conventions that passes the queue first.
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Link: https://lore.kernel.org/r/20221030100714.876891-3-hch@lst.deSigned-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent eb5bca73
...@@ -132,24 +132,15 @@ static struct elevator_type *elevator_find(const char *name, ...@@ -132,24 +132,15 @@ static struct elevator_type *elevator_find(const char *name,
return NULL; return NULL;
} }
static struct elevator_type *elevator_get(struct request_queue *q, static struct elevator_type *elevator_find_get(struct request_queue *q,
const char *name, bool try_loading) const char *name)
{ {
struct elevator_type *e; struct elevator_type *e;
spin_lock(&elv_list_lock); spin_lock(&elv_list_lock);
e = elevator_find(name, q->required_elevator_features); e = elevator_find(name, q->required_elevator_features);
if (!e && try_loading) {
spin_unlock(&elv_list_lock);
request_module("%s-iosched", name);
spin_lock(&elv_list_lock);
e = elevator_find(name, q->required_elevator_features);
}
if (e && !elevator_tryget(e)) if (e && !elevator_tryget(e))
e = NULL; e = NULL;
spin_unlock(&elv_list_lock); spin_unlock(&elv_list_lock);
return e; return e;
} }
...@@ -634,7 +625,7 @@ static struct elevator_type *elevator_get_default(struct request_queue *q) ...@@ -634,7 +625,7 @@ static struct elevator_type *elevator_get_default(struct request_queue *q)
!blk_mq_is_shared_tags(q->tag_set->flags)) !blk_mq_is_shared_tags(q->tag_set->flags))
return NULL; return NULL;
return elevator_get(q, "mq-deadline", false); return elevator_find_get(q, "mq-deadline");
} }
/* /*
...@@ -757,9 +748,13 @@ static int elevator_change(struct request_queue *q, const char *elevator_name) ...@@ -757,9 +748,13 @@ static int elevator_change(struct request_queue *q, const char *elevator_name)
if (q->elevator && elevator_match(q->elevator->type, elevator_name, 0)) if (q->elevator && elevator_match(q->elevator->type, elevator_name, 0))
return 0; return 0;
e = elevator_get(q, elevator_name, true); e = elevator_find_get(q, elevator_name);
if (!e) if (!e) {
return -EINVAL; request_module("%s-iosched", elevator_name);
e = elevator_find_get(q, elevator_name);
if (!e)
return -EINVAL;
}
ret = elevator_switch(q, e); ret = elevator_switch(q, e);
elevator_put(e); elevator_put(e);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment