X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=lttng-statedump-impl.c;h=b5bfa9fb033a0c6682cfbc52f35c9b970f8adbae;hb=6bcf4dc1770ccf4da479a1fd015cd474eda241eb;hp=a8c32db5e83eea3ac0933b15f54e027b55687105;hpb=9e7078059c0f583c0e530b8fd3574d955548e5a5;p=lttng-modules.git diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index a8c32db5..b5bfa9fb 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -136,6 +136,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) { @@ -155,7 +210,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 @@ -167,26 +222,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); }