aboutsummaryrefslogtreecommitdiffstats
path: root/block/blk-mq.c
diff options
context:
space:
mode:
Diffstat (limited to 'block/blk-mq.c')
-rw-r--r--block/blk-mq.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 8f5b533764ca..9437a5eb07cf 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -737,12 +737,20 @@ static void blk_mq_requeue_work(struct work_struct *work)
737 spin_unlock_irq(&q->requeue_lock); 737 spin_unlock_irq(&q->requeue_lock);
738 738
739 list_for_each_entry_safe(rq, next, &rq_list, queuelist) { 739 list_for_each_entry_safe(rq, next, &rq_list, queuelist) {
740 if (!(rq->rq_flags & RQF_SOFTBARRIER)) 740 if (!(rq->rq_flags & (RQF_SOFTBARRIER | RQF_DONTPREP)))
741 continue; 741 continue;
742 742
743 rq->rq_flags &= ~RQF_SOFTBARRIER; 743 rq->rq_flags &= ~RQF_SOFTBARRIER;
744 list_del_init(&rq->queuelist); 744 list_del_init(&rq->queuelist);
745 blk_mq_sched_insert_request(rq, true, false, false); 745 /*
746 * If RQF_DONTPREP, rq has contained some driver specific
747 * data, so insert it to hctx dispatch list to avoid any
748 * merge.
749 */
750 if (rq->rq_flags & RQF_DONTPREP)
751 blk_mq_request_bypass_insert(rq, false);
752 else
753 blk_mq_sched_insert_request(rq, true, false, false);
746 } 754 }
747 755
748 while (!list_empty(&rq_list)) { 756 while (!list_empty(&rq_list)) {