Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e1640949 authored by Jens Axboe's avatar Jens Axboe
Browse files

elevator: make elevator_get() attempt to load the appropriate module



Currently we fail if someone requests a valid io scheduler, but it's
modular and not currently loaded. That can happen from a driver init
asking for a different scheduler, or online switching through sysfs
as requested by a user.

This patch makes elevator_get() request_module() to attempt to load
the appropriate module, instead of requiring that done manually.

Signed-off-by: default avatarJens Axboe <jens.axboe@oracle.com>
parent ffc4e759
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;