rq = e->type->ops.mq.get_request(q, op, data);
                        if (rq)
                                rq->rq_flags |= RQF_QUEUED;
-               } else
-                       rq = __blk_mq_alloc_request(data, op);
-       } else {
-               rq = __blk_mq_alloc_request(data, op);
+                       goto allocated;
+               }
        }
 
-       if (rq) {
-               if (!op_is_flush(op)) {
-                       rq->elv.icq = NULL;
-                       if (e && e->type->icq_cache)
-                               blk_mq_sched_assign_ioc(q, rq, bio);
-               }
-               data->hctx->queued++;
-               return rq;
+       rq = __blk_mq_alloc_request(data, op);
+allocated:
+       if (!rq) {
+               blk_queue_exit(q);
+               return NULL;
        }
 
-       blk_queue_exit(q);
-       return NULL;
+       if (!op_is_flush(op)) {
+               rq->elv.icq = NULL;
+               if (e && e->type->icq_cache)
+                       blk_mq_sched_assign_ioc(q, rq, bio);
+       }
+       data->hctx->queued++;
+       return rq;
 }
 
 struct request *blk_mq_alloc_request(struct request_queue *q, int rw,