{
        struct blk_mq_qe_pair *qe;
 
-       if (!q->elevator)
-               return true;
-
        qe = kmalloc(sizeof(*qe), GFP_NOIO | __GFP_NOWARN | __GFP_NORETRY);
        if (!qe)
                return false;
        /* q->elevator needs protection from ->sysfs_lock */
        mutex_lock(&q->sysfs_lock);
 
+       /* the check has to be done with holding sysfs_lock */
+       if (!q->elevator) {
+               kfree(qe);
+               goto unlock;
+       }
+
        INIT_LIST_HEAD(&qe->node);
        qe->q = q;
        qe->type = q->elevator->type;
        __elevator_get(qe->type);
        list_add(&qe->node, head);
        elevator_disable(q);
+unlock:
        mutex_unlock(&q->sysfs_lock);
 
        return true;