Commit 2e92ac61 authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by Jens Axboe
Browse files

block: add trace messages to zone write plugging



Add tracepoints to zone write plugging plug and unplug events.

Examples for these events are:

  kworker/u10:4-393  [001] d..1. 282.991660: disk_zone_wplug_add_bio: 8,0 zone 16, BIO 8388608 + 128
  kworker/0:1H-58    [ [000] d..1. 283.083294: blk_zone_wplug_bio: 8,0 zone 15, BIO 7864320 + 128

Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20250715115324.53308-6-johannes.thumshirn@wdc.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 4020d22f
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -822,6 +822,8 @@ static inline void disk_zone_wplug_add_bio(struct gendisk *disk,
	 * at the tail of the list to preserve the sequential write order.
	 */
	bio_list_add(&zwplug->bio_list, bio);
	trace_disk_zone_wplug_add_bio(zwplug->disk->queue, zwplug->zone_no,
				      bio->bi_iter.bi_sector, bio_sectors(bio));

	zwplug->flags |= BLK_ZONE_WPLUG_PLUGGED;

@@ -1299,6 +1301,9 @@ static void blk_zone_wplug_bio_work(struct work_struct *work)
		goto put_zwplug;
	}

	trace_blk_zone_wplug_bio(zwplug->disk->queue, zwplug->zone_no,
				 bio->bi_iter.bi_sector, bio_sectors(bio));

	if (!blk_zone_wplug_prepare_bio(zwplug, bio)) {
		blk_zone_wplug_bio_io_error(zwplug, bio);
		goto again;
+44 −0
Original line number Diff line number Diff line
@@ -633,6 +633,50 @@ TRACE_EVENT(blkdev_zone_mgmt,
		  (unsigned long long)__entry->sector,
		  __entry->nr_sectors)
);

DECLARE_EVENT_CLASS(block_zwplug,

	TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector,
		 unsigned int nr_sectors),

	TP_ARGS(q, zno, sector, nr_sectors),

	TP_STRUCT__entry(
		__field( dev_t,		dev		)
		__field( unsigned int,	zno		)
		__field( sector_t,	sector		)
		__field( unsigned int,	nr_sectors	)
	),

	TP_fast_assign(
		__entry->dev		= disk_devt(q->disk);
		__entry->zno		= zno;
		__entry->sector		= sector;
		__entry->nr_sectors	= nr_sectors;
	),

	TP_printk("%d,%d zone %u, BIO %llu + %u",
		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->zno,
		  (unsigned long long)__entry->sector,
		  __entry->nr_sectors)
);

DEFINE_EVENT(block_zwplug, disk_zone_wplug_add_bio,

	TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector,
		 unsigned int nr_sectors),

	TP_ARGS(q, zno, sector, nr_sectors)
);

DEFINE_EVENT(block_zwplug, blk_zone_wplug_bio,

	TP_PROTO(struct request_queue *q, unsigned int zno, sector_t sector,
		 unsigned int nr_sectors),

	TP_ARGS(q, zno, sector, nr_sectors)
);

#endif /* _TRACE_BLOCK_H */

/* This part must be outside protection */