]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
blk-mq: add missing unplug trace event
authorKeith Busch <kbusch@kernel.org>
Fri, 6 Sep 2024 19:45:40 +0000 (12:45 -0700)
committerJens Axboe <axboe@kernel.dk>
Sat, 7 Sep 2024 13:41:12 +0000 (07:41 -0600)
The single-queue optimized list flush doesn't have an unplug trace event
to pair with the plug event. Add one.

In the unlikely event an error occurs and falls back to the less
optimized plug flush path, it's possible a 2nd unplug trace event will
be logged, but it will show the remainig count that weren't previously
handled.

Signed-off-by: Keith Busch <kbusch@kernel.org>
Link: https://lore.kernel.org/r/20240906194540.3719642-1-kbusch@meta.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/blk-mq.c

index 36abbaefe387497476b4ba717bb646eec7bd940a..3f1f7d0b3ff35ec0a6a61192dc317fe0fbec2c55 100644 (file)
@@ -2753,6 +2753,7 @@ static void blk_mq_dispatch_plug_list(struct blk_plug *plug, bool from_sched)
 void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
 {
        struct request *rq;
+       unsigned int depth;
 
        /*
         * We may have been called recursively midway through handling
@@ -2763,6 +2764,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
         */
        if (plug->rq_count == 0)
                return;
+       depth = plug->rq_count;
        plug->rq_count = 0;
 
        if (!plug->multiple_queues && !plug->has_elevator && !from_schedule) {
@@ -2770,6 +2772,7 @@ void blk_mq_flush_plug_list(struct blk_plug *plug, bool from_schedule)
 
                rq = rq_list_peek(&plug->mq_list);
                q = rq->q;
+               trace_block_unplug(q, depth, true);
 
                /*
                 * Peek first request and see if we have a ->queue_rqs() hook.