From efadcbcd2a7db4c528bd6be88dc67ec174160c88 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 19 Feb 2008 10:20:37 +0100 Subject: [PATCH] --- yaml --- r: 85886 b: refs/heads/master c: e164094964e6e20fe7fce418e06a9dce952bb7a4 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/block/elevator.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 0abc43cb056d..7c62901b1fe2 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: ffc4e7595734cf768fa60cea8a4d545dfef8231a +refs/heads/master: e164094964e6e20fe7fce418e06a9dce952bb7a4 diff --git a/trunk/block/elevator.c b/trunk/block/elevator.c index bafbae0344d3..88318c383608 100644 --- a/trunk/block/elevator.c +++ b/trunk/block/elevator.c @@ -134,6 +134,21 @@ static struct elevator_type *elevator_get(const char *name) spin_lock(&elv_list_lock); e = elevator_find(name); + if (!e) { + char elv[ELV_NAME_MAX + strlen("-iosched")]; + + spin_unlock(&elv_list_lock); + + if (!strcmp(name, "anticipatory")) + sprintf(elv, "as-iosched"); + else + sprintf(elv, "%s-iosched", name); + + request_module(elv); + spin_lock(&elv_list_lock); + e = elevator_find(name); + } + if (e && !try_module_get(e->elevator_owner)) e = NULL;