struct blk_mq_ctx *ctx = data->ctx;
        struct blk_mq_hw_ctx *hctx = data->hctx;
        struct request_queue *q = data->q;
-       struct elevator_queue *e = q->elevator;
        struct blk_mq_tags *tags = blk_mq_tags_from_data(data);
        struct request *rq = tags->static_rqs[tag];
-       unsigned int rq_flags = 0;
 
-       if (e) {
-               rq_flags = RQF_ELV;
-               rq->tag = BLK_MQ_NO_TAG;
-               rq->internal_tag = tag;
-       } else {
+       if (!(data->rq_flags & RQF_ELV)) {
                rq->tag = tag;
                rq->internal_tag = BLK_MQ_NO_TAG;
+       } else {
+               rq->tag = BLK_MQ_NO_TAG;
+               rq->internal_tag = tag;
        }
 
        if (data->flags & BLK_MQ_REQ_PM)
-               rq_flags |= RQF_PM;
+               data->rq_flags |= RQF_PM;
        if (blk_queue_io_stat(q))
-               rq_flags |= RQF_IO_STAT;
-       rq->rq_flags = rq_flags;
+               data->rq_flags |= RQF_IO_STAT;
+       rq->rq_flags = data->rq_flags;
 
        if (blk_mq_need_time_stamp(rq))
                rq->start_time_ns = ktime_get_ns();
                .q              = q,
                .flags          = flags,
                .cmd_flags      = op,
+               .rq_flags       = q->elevator ? RQF_ELV : 0,
                .nr_tags        = 1,
        };
        struct request *rq;
                .q              = q,
                .flags          = flags,
                .cmd_flags      = op,
+               .rq_flags       = q->elevator ? RQF_ELV : 0,
                .nr_tags        = 1,
        };
        u64 alloc_time_ns = 0;
                        .q              = q,
                        .nr_tags        = 1,
                        .cmd_flags      = bio->bi_opf,
+                       .rq_flags       = q->elevator ? RQF_ELV : 0,
                };
 
                if (plug) {
 
        blk_mq_req_flags_t flags;
        unsigned int shallow_depth;
        unsigned int cmd_flags;
+       unsigned int rq_flags;
 
        /* allocate multiple requests/tags in one go */
        unsigned int nr_tags;
 
 static inline struct blk_mq_tags *blk_mq_tags_from_data(struct blk_mq_alloc_data *data)
 {
-       if (data->q->elevator)
-               return data->hctx->sched_tags;
-
-       return data->hctx->tags;
+       if (!(data->rq_flags & RQF_ELV))
+               return data->hctx->tags;
+       return data->hctx->sched_tags;
 }
 
 static inline bool blk_mq_hctx_stopped(struct blk_mq_hw_ctx *hctx)