]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - block/elevator.c
Merge tag 'smack-for-5.4-rc1' of git://github.com/cschaufler/smack-next
[linux.git] / block / elevator.c
index 520d6b224b74cd3c976f8ac30afb481abdda817b..bba10e83478a0902dc883e7924a6f5cb66bec83b 100644 (file)
@@ -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;
 }
 
 /*
@@ -712,7 +713,14 @@ void elevator_init_mq(struct request_queue *q)
        if (!e)
                return;
 
+       blk_mq_freeze_queue(q);
+       blk_mq_quiesce_queue(q);
+
        err = blk_mq_init_sched(q, e);
+
+       blk_mq_unquiesce_queue(q);
+       blk_mq_unfreeze_queue(q);
+
        if (err) {
                pr_warn("\"%s\" elevator initialization failed, "
                        "falling back to \"none\"\n", e->elevator_name);