[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20171002141956.GB16855@infradead.org>
Date: Mon, 2 Oct 2017 07:19:56 -0700
From: Christoph Hellwig <hch@...radead.org>
To: Ming Lei <ming.lei@...hat.com>
Cc: Jens Axboe <axboe@...com>, linux-block@...r.kernel.org,
Christoph Hellwig <hch@...radead.org>,
Mike Snitzer <snitzer@...hat.com>, dm-devel@...hat.com,
Bart Van Assche <bart.vanassche@...disk.com>,
Laurence Oberman <loberman@...hat.com>,
Paolo Valente <paolo.valente@...aro.org>,
Oleksandr Natalenko <oleksandr@...alenko.name>,
Tom Nguyen <tom81094@...il.com>, linux-kernel@...r.kernel.org,
linux-scsi@...r.kernel.org, Omar Sandoval <osandov@...com>
Subject: Re: [PATCH V5 5/7] blk-mq-sched: move actual dispatching into one
helper
Can you move this to the beginning of your series, just after
the other edits to blk_mq_sched_dispatch_requests?
> +static void blk_mq_do_dispatch_sched(struct request_queue *q,
> + struct elevator_queue *e,
> + struct blk_mq_hw_ctx *hctx)
No need to pass anything but the hctx here, the other two can
be trivially derived from it.
> +{
> + LIST_HEAD(rq_list);
> +
> + do {
> + struct request *rq;
> +
> + rq = e->type->ops.mq.dispatch_request(hctx);
how about shortening this to:
struct request *rq = e->type->ops.mq.dispatch_request(hctx);
> void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
> {
> struct request_queue *q = hctx->queue;
> @@ -136,16 +152,8 @@ void blk_mq_sched_dispatch_requests(struct blk_mq_hw_ctx *hctx)
> * on the dispatch list or we were able to dispatch from the
> * dispatch list.
> */
> - if (do_sched_dispatch && has_sched_dispatch) {
> - do {
> - struct request *rq;
> -
> - rq = e->type->ops.mq.dispatch_request(hctx);
> - if (!rq)
> - break;
> - list_add(&rq->queuelist, &rq_list);
> - } while (blk_mq_dispatch_rq_list(q, &rq_list));
> - }
> + if (do_sched_dispatch && has_sched_dispatch)
> + blk_mq_do_dispatch_sched(q, e, hctx);
> }
Please use this new helper to simplify the logic. E.g.:
if (!list_empty(&rq_list)) {
blk_mq_sched_mark_restart_hctx(hctx);
if (blk_mq_dispatch_rq_list(q, &rq_list) && has_sched_dispatch)
blk_mq_do_dispatch_sched(hctx);
} else if (has_sched_dispatch) {
blk_mq_do_dispatch_sched(hctx);
} else {
blk_mq_flush_busy_ctxs(hctx, &rq_list);
blk_mq_dispatch_rq_list(q, &rq_list);
}
Powered by blists - more mailing lists