Hi Jens, Recently we've added several new operations for zoned block devices blk-zone.c (ZBD). These operations have a direct effect on the zone-state machine present in the null_blk_zoned.c. This will allow us to add new testcases in blktests in order to verify the correct operations on the driver side. This is a small patch series which adds tracepoints for the null_blk block driver when configured in a zoned mode (with command line parameter zoned=1). The first patch is a prep patch that adds a helper to stringify zone conditions which we use in the trace, the second patch adds new tracepoint definitions and the third patch allows null_blk_zoned to trace operations. Please have a look at the end for sample test output which has tests for CONFIG_BLK_DEV_ZONED and !CONFIG_BLK_DEV_ZONED. Regards, Chaitanya Changes from V2 : - 1. Only compile null_blk_trace.c file if tracing and blk_dev_zoned is enabled. 2. Add a test log with and without CONFIG_BLK_DEV_ZONED. 3. Move Change log to the cover-letter. 4. Declare blk_zone_cond_str() without any CONFIG_BLK_DEV_ZONED conditions. 5. Add a comment to the ${KDIR_HOME}/drivers/block/Makefile about whay we need ccflags-y. 6. Fix cover-letter header. 7. Add a copyright banner in null_blk_trace.c. Changes from V1 : - 1. Move blk_zone_cond_str() to blk-zoned.c. 2. Mark zone_cond_namd array static. 3. Remove BLK_ZONE_COND_LAST. 4. Get rid of inline prefix for blk_zone_cond_str(). 5. Use CONFIG_BLK_DEV_ZONE for null_blk_trace.o. Chaitanya Kulkarni (3): block: add a zone condition debug helper null_blk: add tracepoint helpers for zoned mode null_blk: add trace in null_blk_zoned.c block/blk-zoned.c | 32 ++++++++++++++ drivers/block/Makefile | 6 +++ drivers/block/null_blk_trace.c | 21 +++++++++ drivers/block/null_blk_trace.h | 79 ++++++++++++++++++++++++++++++++++ drivers/block/null_blk_zoned.c | 12 +++++- include/linux/blkdev.h | 3 ++ 6 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 drivers/block/null_blk_trace.c create mode 100644 drivers/block/null_blk_trace.h Test Results :- 1. With CONFIG_BLK_DEV_ZONED DISABLED :- ---------------------------------------- # zcat /proc/config.gz | grep BLK_DEV_ZONED # CONFIG_BLK_DEV_ZONED is not set # makej M=drivers/block MODPOST 11 modules CC [M] drivers/block/brd.mod.o CC [M] drivers/block/floppy.mod.o CC [M] drivers/block/loop.mod.o CC [M] drivers/block/mtip32xx/mtip32xx.mod.o CC [M] drivers/block/null_blk.mod.o <--- CC [M] drivers/block/pktcdvd.mod.o CC [M] drivers/block/rbd.mod.o CC [M] drivers/block/sx8.mod.o CC [M] drivers/block/virtio_blk.mod.o CC [M] drivers/block/xen-blkfront.mod.o CC [M] drivers/block/zram/zram.mod.o LD [M] drivers/block/xen-blkfront.ko LD [M] drivers/block/brd.ko LD [M] drivers/block/rbd.ko LD [M] drivers/block/virtio_blk.ko LD [M] drivers/block/sx8.ko LD [M] drivers/block/floppy.ko LD [M] drivers/block/null_blk.ko <--- LD [M] drivers/block/pktcdvd.ko LD [M] drivers/block/loop.ko LD [M] drivers/block/zram/zram.ko LD [M] drivers/block/mtip32xx/mtip32xx.ko # insmod drivers/block/null_blk.ko # dmesg -c [ 1610.279303] null_blk: loading out-of-tree module taints kernel. [ 1610.279390] null_blk: module verification failed: signature and/or required key missing - tainting kernel [ 1610.290823] null_blk: module loaded # rmmod drivers/block/null_blk.ko # insmod drivers/block/null_blk.ko zoned=1 insmod: ERROR: could not insert module drivers/block/null_blk.ko: Invalid parameters # dmesg -c [ 1627.347747] null_blk: CONFIG_BLK_DEV_ZONED not enabled # ls /sys/kernel/debug/tracing/events/ | grep null # echo $? 1 2. With CONFIG_BLK_DEV_ZONED ENABLED :- --------------------------------------- # zcat /proc/config.gz | grep BLK_DEV_ZONED CONFIG_BLK_DEV_ZONED=y # makej M=drivers/block/ AR drivers/block//built-in.a CC [M] drivers/block//floppy.o CC [M] drivers/block//brd.o CC [M] drivers/block//loop.o CC [M] drivers/block//pktcdvd.o CC [M] drivers/block//virtio_blk.o CC [M] drivers/block//zram/zcomp.o CC [M] drivers/block//mtip32xx/mtip32xx.o CC [M] drivers/block//sx8.o CC [M] drivers/block//zram/zram_drv.o CC [M] drivers/block//rbd.o CC [M] drivers/block//xen-blkfront.o CC [M] drivers/block//null_blk_main.o <--- CC [M] drivers/block//null_blk_trace.o <--- CC [M] drivers/block//null_blk_zoned.o <--- LD [M] drivers/block//zram/zram.o LD [M] drivers/block//null_blk.o MODPOST 11 modules CC [M] drivers/block//brd.mod.o CC [M] drivers/block//floppy.mod.o CC [M] drivers/block//loop.mod.o CC [M] drivers/block//mtip32xx/mtip32xx.mod.o CC [M] drivers/block//null_blk.mod.o <--- CC [M] drivers/block//pktcdvd.mod.o CC [M] drivers/block//rbd.mod.o CC [M] drivers/block//sx8.mod.o CC [M] drivers/block//virtio_blk.mod.o CC [M] drivers/block//xen-blkfront.mod.o CC [M] drivers/block//zram/zram.mod.o LD [M] drivers/block//pktcdvd.ko LD [M] drivers/block//floppy.ko LD [M] drivers/block//brd.ko LD [M] drivers/block//mtip32xx/mtip32xx.ko LD [M] drivers/block//loop.ko LD [M] drivers/block//virtio_blk.ko LD [M] drivers/block//null_blk.ko LD [M] drivers/block//rbd.ko LD [M] drivers/block//xen-blkfront.ko LD [M] drivers/block//sx8.ko LD [M] drivers/block//zram/zram.ko # insmod drivers/block/null_blk.ko # dmesg -c [ 543.576548] null_blk: module loaded # lsblk | grep nullb0 nullb0 252:0 0 250G 0 disk # rmmod null_blk # insmod drivers/block/null_blk.ko zoned=1 zone_size=128 gb=1 # dmesg -c [ 543.654579] null_blk: module loaded # lsblk | grep nullb0 nullb0 252:0 0 1G 0 disk # blkzone report /dev/nullb0 start: 0x000000000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x000040000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x000080000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x0000c0000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x000100000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x000140000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x000180000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] start: 0x0001c0000, len 0x040000, capacity: 0x040000, wptr 0x000000 reset:0 non-seq:0, zcond: 1(em) [type: 2(SEQ_WRITE_REQUIRED)] # echo 1 > /sys/kernel/debug/tracing/events/nullb/enable # for i in open close finish reset; do blkzone $i /dev/nullb0 ; done # cat /sys/kernel/debug/tracing/trace_pipe nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=0 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=1 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=2 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=3 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=4 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=5 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=6 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_OPEN zone_no=7 zone_cond=EXP_OPEN nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=0 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=1 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=2 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=3 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=4 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=5 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=6 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_CLOSE zone_no=7 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=0 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=1 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=2 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=3 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=4 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=5 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=6 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_FINISH zone_no=7 zone_cond=FULL nullb_zone_op: disk=nullb0, req=ZONE_RESET_ALL zone_no=0 zone_cond=EMPTY nullb_zone_op: disk=nullb0, req=WRITE zone_no=0 zone_cond=IMP_OPEN nullb_zone_op: disk=nullb0, req=WRITE zone_no=0 zone_cond=IMP_OPEN nullb_zone_op: disk=nullb0, req=WRITE zone_no=0 zone_cond=IMP_OPEN nullb_zone_op: disk=nullb0, req=WRITE zone_no=0 zone_cond=IMP_OPEN nullb_zone_op: disk=nullb0, req=WRITE zone_no=0 zone_cond=IMP_OPEN -- 2.22.0