break;
 
        case REQ_FSEQ_DATA:
-               list_move_tail(&rq->flush.list, &fq->flush_data_in_flight);
+               list_del_init(&rq->flush.list);
+               fq->flush_data_in_flight++;
                spin_lock(&q->requeue_lock);
                list_add(&rq->queuelist, &q->requeue_list);
                spin_unlock(&q->requeue_lock);
                return;
 
        /* C2 and C3 */
-       if (!list_empty(&fq->flush_data_in_flight) &&
+       if (fq->flush_data_in_flight &&
            time_before(jiffies,
                        fq->flush_pending_since + FLUSH_PENDING_TIMEOUT))
                return;
         * the comment in flush_end_io().
         */
        spin_lock_irqsave(&fq->mq_flush_lock, flags);
+       fq->flush_data_in_flight--;
        blk_flush_complete_seq(rq, fq, REQ_FSEQ_DATA, error);
        spin_unlock_irqrestore(&fq->mq_flush_lock, flags);
 
                blk_rq_init_flush(rq);
                rq->flush.seq |= REQ_FSEQ_PREFLUSH;
                spin_lock_irq(&fq->mq_flush_lock);
-               list_move_tail(&rq->flush.list, &fq->flush_data_in_flight);
+               fq->flush_data_in_flight++;
                spin_unlock_irq(&fq->mq_flush_lock);
                return false;
        default:
 
        INIT_LIST_HEAD(&fq->flush_queue[0]);
        INIT_LIST_HEAD(&fq->flush_queue[1]);
-       INIT_LIST_HEAD(&fq->flush_data_in_flight);
 
        return fq;
 
 
 extern struct dentry *blk_debugfs_root;
 
 struct blk_flush_queue {
+       spinlock_t              mq_flush_lock;
        unsigned int            flush_pending_idx:1;
        unsigned int            flush_running_idx:1;
        blk_status_t            rq_status;
        unsigned long           flush_pending_since;
        struct list_head        flush_queue[2];
-       struct list_head        flush_data_in_flight;
+       unsigned long           flush_data_in_flight;
        struct request          *flush_rq;
-
-       spinlock_t              mq_flush_lock;
 };
 
 bool is_flush_rq(struct request *req);