From 497f7717f35f048099562ba38a50074992fb2f9d Mon Sep 17 00:00:00 2001 From: William Cohen Date: Mon, 24 Jun 2024 22:52:32 -0400 Subject: [PATCH] Update dev.stp tapset for Linux 6.10 Linux 6.10 changes how the partition number is stored in struct block_device. Linux kernel git commit 1116b9fa15c097 puts the partition number in the lower 8 bits of the __bd_flags and uses an accessor function to obtain it. The dev.stp tapset has been adjusted to work with this newer data structure. --- tapset/linux/dev.stp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tapset/linux/dev.stp b/tapset/linux/dev.stp index 4b85b7f25..f6b90c5d3 100644 --- a/tapset/linux/dev.stp +++ b/tapset/linux/dev.stp @@ -64,6 +64,18 @@ function disk_name:string(hd:long, partno:long) return sprintf("%s%d", disk_name, partno) } +%( kernel_v >= "6.10" %? +%{ +#include +%} + +function bdev_partno(bdev:long) +%{ /* pure */ /* unprivileged */ + STAP_RETURN(bdev_partno((const struct block_device *) STAP_ARG_bdev)); +%} +%: +%) + function bdevname:string(bdev:long) { bdev = & @cast(bdev, "block_device", "kernel") @@ -72,11 +84,15 @@ function bdevname:string(bdev:long) hd = bdev->bd_disk +%( kernel_v >= "6.10" %? + partno = bdev_partno(bdev) +%: if (@defined(@cast(bdev, "block_device", "kernel")->bd_partno)) partno = bdev->bd_partno else if (bdev->bd_part) partno = bdev->bd_part->partno else partno = MINOR(bdev->bd_dev) - hd->first_minor; +%) return disk_name(hd, partno) } -- 2.43.5