Use exported symbol bdevname() instead of disk_name()
authorMichael Jeanson <mjeanson@efficios.com>
Thu, 2 Jul 2020 16:06:42 +0000 (12:06 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Mon, 6 Jul 2020 21:27:07 +0000 (17:27 -0400)
bdevname() is a simple wrapper over disk_name() but has the honor to be
exported. Using it removes the need for a kallsym wrapper.

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ic2b2233c4db7826175c68edea69751ddcb17a5e6

include/wrapper/genhd.h
src/lttng-statedump-impl.c

index 807074ddcbe3e3102f010c52e63cfd37fc128a18..30fc5cea60ec75a8bb1b0cf38d7e0657d513e1fb 100644 (file)
 
 #include <linux/genhd.h>
 
-#ifdef CONFIG_KALLSYMS
+#ifdef CONFIG_KALLSYMS_ALL
 
 #include <linux/kallsyms.h>
 #include <wrapper/kallsyms.h>
 
-static inline
-char *wrapper_disk_name(struct gendisk *hd, int partno, char *buf)
-{
-       char *(*disk_name_sym)(struct gendisk *hd, int partno, char *buf);
-
-       disk_name_sym = (void *) kallsyms_lookup_funcptr("disk_name");
-       if (disk_name_sym) {
-               return disk_name_sym(hd, partno, buf);
-       } else {
-               printk_once(KERN_WARNING "LTTng: disk_name symbol lookup failed.\n");
-               return NULL;
-       }
-}
-
-#else
-
-static inline
-char *wrapper_disk_name(struct gendisk *hd, int partno, char *buf)
-{
-       return disk_name(hd, partno, buf);
-}
-
-#endif
-
-#ifdef CONFIG_KALLSYMS_ALL
-
 static inline
 struct class *wrapper_get_block_class(void)
 {
index 1a2a12ba7f650ceb9a633b2cd7f79729aeadec32..4105374e640d19e848bf2bc424e8ad4dc2f04261 100644 (file)
@@ -151,10 +151,19 @@ 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];
-                       char *p;
+                       const char *p;
 
-                       p = wrapper_disk_name(disk, part->partno, name_buf);
+                       /*
+                        * 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) {
                                disk_part_iter_exit(&piter);
                                class_dev_iter_exit(&iter);
This page took 0.026689 seconds and 4 git commands to generate.