On 1/14/18 10:43 AM, Mike Snitzer wrote: > On Sun, Jan 14 2018 at 12:38pm -0500, > Jens Axboe <axboe@xxxxxxxxx> wrote: > >> On 1/13/18 10:49 AM, Ming Lei wrote: >>> In case of no IO scheduler, RQF_MQ_INFLIGHT is set in blk_mq_rq_ctx_init(), >>> but 7c3fb70f0341 clears it mistakenly, so fix it. >> >> Oops yeah, that's my bad. However, I think the below fix is cleaner >> and avoids a conditional. >> >> >> diff --git a/block/blk-mq.c b/block/blk-mq.c >> index b3b2003b7429..c8f62e6be6b6 100644 >> --- a/block/blk-mq.c >> +++ b/block/blk-mq.c >> @@ -269,13 +269,14 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, >> { >> struct blk_mq_tags *tags = blk_mq_tags_from_data(data); >> struct request *rq = tags->static_rqs[tag]; >> + req_flags_t rq_flags = 0; >> >> if (data->flags & BLK_MQ_REQ_INTERNAL) { >> rq->tag = -1; >> rq->internal_tag = tag; >> } else { >> if (blk_mq_tag_busy(data->hctx)) { >> - rq->rq_flags = RQF_MQ_INFLIGHT; >> + rq_flags = RQF_MQ_INFLIGHT; >> atomic_inc(&data->hctx->nr_active); >> } >> rq->tag = tag; >> @@ -286,7 +287,7 @@ static struct request *blk_mq_rq_ctx_init(struct blk_mq_alloc_data *data, >> /* csd/requeue_work/fifo_time is initialized before use */ >> rq->q = data->q; >> rq->mq_ctx = data->ctx; >> - rq->rq_flags = 0; >> + rq->rq_flags = rq_flags; >> rq->cpu = -1; >> rq->cmd_flags = op; >> if (data->flags & BLK_MQ_REQ_PREEMPT) > > Yeap, looks good. > > Reviewed-by: Mike Snitzer <snitzer@xxxxxxxxxx> > > Defintely need this fix, without it all my dm-mpath testing hangs Yeah, pretty unfortunate... I've applied it and pushed it out. -- Jens Axboe