Commit 4020d22f authored by Johannes Thumshirn's avatar Johannes Thumshirn Committed by Jens Axboe
Browse files

block: add tracepoint for blkdev_zone_mgmt



Add a tracepoint for blkdev_zone_mgmt to trace zone management commands
submitted by higher layers like file systems or user space.

An example output for this tracepoint is as follows:

  mkfs.btrfs-203  [001] .....  42.877493: blkdev_zone_mgmt: 8,0 ZRS 5242880 + 0

This example output shows a REQ_OP_ZONE_RESET operation submitted by
mkfs.btrfs.

Reviewed-by: default avatarDamien Le Moal <dlemoal@kernel.org>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarChaitanya Kulkarni <kch@nvidia.com>
Reviewed-by: default avatarBart Van Assche <bvanassche@acm.org>
Signed-off-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
Link: https://lore.kernel.org/r/20250715115324.53308-5-johannes.thumshirn@wdc.com


Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 4cc21a00
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ static int blkdev_zone_reset_all(struct block_device *bdev)
	struct bio bio;

	bio_init(&bio, bdev, NULL, 0, REQ_OP_ZONE_RESET_ALL | REQ_SYNC);
	trace_blkdev_zone_mgmt(&bio, 0);
	return submit_bio_wait(&bio);
}

@@ -242,6 +243,7 @@ int blkdev_zone_mgmt(struct block_device *bdev, enum req_op op,
		cond_resched();
	}

	trace_blkdev_zone_mgmt(bio, nr_sectors);
	ret = submit_bio_wait(bio);
	bio_put(bio);

+34 −0
Original line number Diff line number Diff line
@@ -599,6 +599,40 @@ TRACE_EVENT(block_rq_remap,
		  (unsigned long long)__entry->old_sector, __entry->nr_bios)
);

/**
 * blkdev_zone_mgmt - Execute a zone management operation on a range of zones
 * @bio: The block IO operation sent down to the device
 * @nr_sectors: The number of sectors affected by this operation
 *
 * Execute a zone management operation on a specified range of zones. This
 * range is encoded in %nr_sectors, which has to be a multiple of the zone
 * size.
 */
TRACE_EVENT(blkdev_zone_mgmt,

	TP_PROTO(struct bio *bio, sector_t nr_sectors),

	TP_ARGS(bio, nr_sectors),

	TP_STRUCT__entry(
	    __field(  dev_t,	dev		)
	    __field(  sector_t,	sector		)
	    __field(  sector_t, nr_sectors	)
	    __array(  char,	rwbs,	RWBS_LEN)
	),

	TP_fast_assign(
	    __entry->dev	= bio_dev(bio);
	    __entry->sector	= bio->bi_iter.bi_sector;
	    __entry->nr_sectors	= bio_sectors(bio);
	    blk_fill_rwbs(__entry->rwbs, bio->bi_opf);
        ),

	TP_printk("%d,%d %s %llu + %llu",
		  MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
		  (unsigned long long)__entry->sector,
		  __entry->nr_sectors)
);
#endif /* _TRACE_BLOCK_H */

/* This part must be outside protection */