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

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

block: fix elevator_get_by_features()



The lookup logic is broken - 'e' will never be NULL, even if the
list is empty. Maintain lookup hit in a separate variable instead.

Fixes: a0958ba7 ("block: Improve default elevator selection")
Reported-by: default avatarJulia Lawall <julia.lawall@lip6.fr>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent ebddd2a1
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -668,22 +668,23 @@ static struct elevator_type *elevator_get_default(struct request_queue *q)
 */
static struct elevator_type *elevator_get_by_features(struct request_queue *q)
{
	struct elevator_type *e;
	struct elevator_type *e, *found = NULL;

	spin_lock(&elv_list_lock);

	list_for_each_entry(e, &elv_list, list) {
		if (elv_support_features(e->elevator_features,
					 q->required_elevator_features))
					 q->required_elevator_features)) {
			found = e;
			break;
		}
	}

	if (e && !try_module_get(e->elevator_owner))
		e = NULL;
	if (found && !try_module_get(found->elevator_owner))
		found = NULL;

	spin_unlock(&elv_list_lock);

	return e;
	return found;
}

/*