Message ID | 20180926123550.16311-1-idryomov@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | blk-mq: I/O and timer unplugs are inverted in blktrace | expand |
On Wed, Sep 26, 2018 at 02:35:50PM +0200, Ilya Dryomov wrote: > trace_block_unplug() takes true for explicit unplugs and false for > implicit unplugs. schedule() unplugs are implicit and should be > reported as timer unplugs. While correct in the legacy code, this has > been inverted in blk-mq since 4.11. > > Cc: stable@vger.kernel.org > Fixes: bd166ef183c2 ("blk-mq-sched: add framework for MQ capable IO schedulers") Reviewed-by: Omar Sandoval <osandov@fb.com> > Signed-off-by: Ilya Dryomov <idryomov@gmail.com> > --- > block/blk-mq.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/block/blk-mq.c b/block/blk-mq.c > index 85a1c1a59c72..e3c39ea8e17b 100644 > --- a/block/blk-mq.c > +++ b/block/blk-mq.c > @@ -1628,7 +1628,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > BUG_ON(!rq->q); > if (rq->mq_ctx != this_ctx) { > if (this_ctx) { > - trace_block_unplug(this_q, depth, from_schedule); > + trace_block_unplug(this_q, depth, !from_schedule); > blk_mq_sched_insert_requests(this_q, this_ctx, > &ctx_list, > from_schedule); > @@ -1648,7 +1648,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) > * on 'ctx_list'. Do those. > */ > if (this_ctx) { > - trace_block_unplug(this_q, depth, from_schedule); > + trace_block_unplug(this_q, depth, !from_schedule); > blk_mq_sched_insert_requests(this_q, this_ctx, &ctx_list, > from_schedule); > } > -- > 2.14.4 >
On 9/26/18 6:35 AM, Ilya Dryomov wrote: > trace_block_unplug() takes true for explicit unplugs and false for > implicit unplugs. schedule() unplugs are implicit and should be > reported as timer unplugs. While correct in the legacy code, this has > been inverted in blk-mq since 4.11. That's pretty silly... Thanks, will queue up for 4.19.
diff --git a/block/blk-mq.c b/block/blk-mq.c index 85a1c1a59c72..e3c39ea8e17b 100644 --- a/block/blk-mq.c +++ b/block/blk-mq.c @@ -1628,7 +1628,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) BUG_ON(!rq->q); if (rq->mq_ctx != this_ctx) { if (this_ctx) { - trace_block_unplug(this_q, depth, from_schedule); + trace_block_unplug(this_q, depth, !from_schedule); blk_mq_sched_insert_requests(this_q, this_ctx, &ctx_list, from_schedule); @@ -1648,7 +1648,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule) * on 'ctx_list'. Do those. */ if (this_ctx) { - trace_block_unplug(this_q, depth, from_schedule); + trace_block_unplug(this_q, depth, !from_schedule); blk_mq_sched_insert_requests(this_q, this_ctx, &ctx_list, from_schedule); }
trace_block_unplug() takes true for explicit unplugs and false for implicit unplugs. schedule() unplugs are implicit and should be reported as timer unplugs. While correct in the legacy code, this has been inverted in blk-mq since 4.11. Cc: stable@vger.kernel.org Fixes: bd166ef183c2 ("blk-mq-sched: add framework for MQ capable IO schedulers") Signed-off-by: Ilya Dryomov <idryomov@gmail.com> --- block/blk-mq.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)