diff mbox series

blk-mq: I/O and timer unplugs are inverted in blktrace

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

Commit Message

Ilya Dryomov Sept. 26, 2018, 12:35 p.m. UTC
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(-)

Comments

Omar Sandoval Sept. 27, 2018, 7:09 p.m. UTC | #1
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
>
Jens Axboe Sept. 27, 2018, 7:12 p.m. UTC | #2
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 mbox series

Patch

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);
 	}