X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=lttng-statedump-impl.c;h=5511c7e82cf4da0a09056de5637ee4be9fd966a9;hb=d89339591ec12a2686eb98ba7cdf16fb883a7863;hp=60b937c98b77f22ab5a1cac6eb331f4900eedbf2;hpb=71034df1e32a9502b58961327ef2c7a7c556b082;p=lttng-modules.git diff --git a/lttng-statedump-impl.c b/lttng-statedump-impl.c index 60b937c9..5511c7e8 100644 --- a/lttng-statedump-impl.c +++ b/lttng-statedump-impl.c @@ -250,13 +250,17 @@ int lttng_enumerate_block_devices(struct lttng_session *session) struct device_type *ptr_disk_type; struct class_dev_iter iter; struct device *dev; + int ret = 0; ptr_block_class = wrapper_get_block_class(); - if (!ptr_block_class) - return -ENOSYS; + if (!ptr_block_class) { + ret = -ENOSYS; + goto end; + } ptr_disk_type = wrapper_get_disk_type(); if (!ptr_disk_type) { - return -ENOSYS; + ret = -ENOSYS; + goto end; } class_dev_iter_init(&iter, ptr_block_class, NULL, ptr_disk_type); while ((dev = class_dev_iter_next(&iter))) { @@ -272,22 +276,32 @@ int lttng_enumerate_block_devices(struct lttng_session *session) (disk->flags & GENHD_FL_SUPPRESS_PARTITION_INFO)) continue; - disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0); - while ((part = disk_part_iter_next(&piter))) { + /* + * The original 'disk_part_iter_init' returns void, but our + * wrapper can fail to lookup the original symbol. + */ + if (wrapper_disk_part_iter_init(&piter, disk, DISK_PITER_INCL_PART0) < 0) { + ret = -ENOSYS; + goto iter_exit; + } + + while ((part = wrapper_disk_part_iter_next(&piter))) { char name_buf[BDEVNAME_SIZE]; if (lttng_get_part_name(disk, part, name_buf) == -ENOSYS) { - disk_part_iter_exit(&piter); - class_dev_iter_exit(&iter); - return -ENOSYS; + wrapper_disk_part_iter_exit(&piter); + ret = -ENOSYS; + goto iter_exit; } trace_lttng_statedump_block_device(session, lttng_get_part_devt(part), name_buf); } - disk_part_iter_exit(&piter); + wrapper_disk_part_iter_exit(&piter); } +iter_exit: class_dev_iter_exit(&iter); - return 0; +end: + return ret; } #ifdef CONFIG_INET