Messages in this thread | | | Subject | Re: [PATCH 09/14] blk-mq: ensure that plug lists don't straddle hardware queues | From | Bart Van Assche <> | Date | Mon, 29 Oct 2018 12:27:58 -0700 |
| |
On Mon, 2018-10-29 at 10:37 -0600, Jens Axboe wrote: > void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > { > struct blk_mq_ctx *this_ctx; > @@ -1628,7 +1649,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > struct request *rq; > LIST_HEAD(list); > LIST_HEAD(ctx_list); > - unsigned int depth; > + unsigned int depth, this_flags; > > list_splice_init(&plug->mq_list, &list); > > @@ -1636,13 +1657,14 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > > this_q = NULL; > this_ctx = NULL; > + this_flags = 0; > depth = 0; > > while (!list_empty(&list)) { > rq = list_entry_rq(list.next); > list_del_init(&rq->queuelist); > BUG_ON(!rq->q); > - if (rq->mq_ctx != this_ctx) { > + if (!ctx_match(rq, this_ctx, this_flags)) { > if (this_ctx) { > trace_block_unplug(this_q, depth, !from_schedule); > blk_mq_sched_insert_requests(this_q, this_ctx, > @@ -1650,6 +1672,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > from_schedule); > } > > + this_flags = rq->cmd_flags; > this_ctx = rq->mq_ctx; > this_q = rq->q; > depth = 0;
This patch will cause the function stored in the flags_to_type pointer to be called 2 * (n - 1) times where n is the number of elements in 'list' when blk_mq_sched_insert_requests() is called. Have you considered to rearrange the code such that that number of calls is reduced to n?
Thanks,
Bart.
| |