X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttng-statedump-impl.c;h=7dde1d23e3337ba3704a5b815fb33cd2ec885330;hb=c2d5363fee624e18bc26938e209b4b5bdd8799cd;hp=cf803a73bf5b3b49e48f221b33b76719b4e8f7d1;hpb=9097b0c20a70a6e764d926fcb41399f40072e612;p=lttng-modules.git diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index cf803a73..7dde1d23 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -188,6 +188,61 @@ enum lttng_process_status { LTTNG_DEAD = 7, }; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0)) + +#define LTTNG_PART_STRUCT_TYPE struct block_device + +static +int lttng_get_part_name(struct gendisk *disk, struct block_device *part, char *name_buf) +{ + const char *p; + + p = bdevname(part, name_buf); + if (!p) + return -ENOSYS; + + return 0; +} + +static +dev_t lttng_get_part_devt(struct block_device *part) +{ + return part->bd_dev; +} + +#else + +#define LTTNG_PART_STRUCT_TYPE struct hd_struct + +static +int lttng_get_part_name(struct gendisk *disk, struct hd_struct *part, char *name_buf) +{ + const char *p; + struct block_device bdev; + + /* + * Create a partial 'struct blockdevice' to use + * 'bdevname()' which is a simple wrapper over + * 'disk_name()' but has the honor to be EXPORT_SYMBOL. + */ + bdev.bd_disk = disk; + bdev.bd_part = part; + + p = bdevname(&bdev, name_buf); + if (!p) + return -ENOSYS; + + return 0; +} + +static +dev_t lttng_get_part_devt(struct hd_struct *part) +{ + return part_devt(part); +} +#endif + static int lttng_enumerate_block_devices(struct lttng_session *session) { @@ -207,7 +262,7 @@ int lttng_enumerate_block_devices(struct lttng_session *session) while ((dev = class_dev_iter_next(&iter))) { struct disk_part_iter piter; struct gendisk *disk = dev_to_disk(dev); - struct hd_struct *part; + LTTNG_PART_STRUCT_TYPE *part; /* * Don't show empty devices or things that have been @@ -219,26 +274,15 @@ int lttng_enumerate_block_devices(struct lttng_session *session) disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); while ((part = disk_part_iter_next(&piter))) { - struct block_device bdev; char name_buf[BDEVNAME_SIZE]; - const char *p; - - /* - * Create a partial 'struct blockdevice' to use - * 'bdevname()' which is a simple wrapper over - * 'disk_name()' but has the honor to be EXPORT_SYMBOL. - */ - bdev.bd_disk = disk; - bdev.bd_part = part; - p = bdevname(&bdev, name_buf); - if (!p) { + if (lttng_get_part_name(disk, part, name_buf) == -ENOSYS) { disk_part_iter_exit(&piter); class_dev_iter_exit(&iter); return -ENOSYS; } trace_lttng_statedump_block_device(session, - part_devt(part), name_buf); + lttng_get_part_devt(part), name_buf); } disk_part_iter_exit(&piter); }