X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=block%2Fblk-mq.c;h=9437a5eb07cff63062ed459afc0b6b90e685e6f7;hb=d68be4c4d31295ff6ae34a8ddfaa4c1a8ff42812;hp=8f5b533764ca0c286ec0d34b3462d7e64e3713d9;hpb=70be9ac2b64c0d0db4f0e3004b764df33b1098e2;p=linux-2.6-microblaze.git 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) spin_unlock_irq(&q->requeue_lock); list_for_each_entry_safe(rq, next, &rq_list, queuelist) { - if (!(rq->rq_flags & RQF_SOFTBARRIER)) + if (!(rq->rq_flags & (RQF_SOFTBARRIER | RQF_DONTPREP))) continue; rq->rq_flags &= ~RQF_SOFTBARRIER; list_del_init(&rq->queuelist); - blk_mq_sched_insert_request(rq, true, false, false); + /* + * If RQF_DONTPREP, rq has contained some driver specific + * data, so insert it to hctx dispatch list to avoid any + * merge. + */ + if (rq->rq_flags & RQF_DONTPREP) + blk_mq_request_bypass_insert(rq, false); + else + blk_mq_sched_insert_request(rq, true, false, false); } while (!list_empty(&rq_list)) {