]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: use devno to get mountpoint
authorKarel Zak <kzak@redhat.com>
Mon, 8 Jul 2013 12:21:03 +0000 (14:21 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 8 Jul 2013 12:21:03 +0000 (14:21 +0200)
The device (for example LVM logical volume) could be renamed and then
the device name from /proc/self/mountinfo does not match with reality.
So, we also need to check devno. Unfortunately we cannot completely
rely on devno, because for example btrfs uses psudo device numbers.

References: https://bugzilla.redhat.com/show_bug.cgi?id=980463
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk.c

index 494bc73a84b6ffd0104eda31439fa46d14f03dca..4f4350587aedb91a60eb0bfd8f7438418986f3f8 100644 (file)
@@ -372,8 +372,12 @@ static char *get_device_mountpoint(struct blkdev_cxt *cxt)
                mnt_table_parse_mtab(mtab, NULL);
        }
 
-       /* try /etc/mtab or /proc/self/mountinfo */
-       fs = mnt_table_find_srcpath(mtab, cxt->filename, MNT_ITER_BACKWARD);
+       /* Note that maj:min in /proc/self/mouninfo does not have to match with
+        * devno as returned by stat(), so we have to try devname too
+        */
+       fs = mnt_table_find_devno(mtab, makedev(cxt->maj, cxt->min), MNT_ITER_BACKWARD);
+       if (!fs)
+               fs = mnt_table_find_srcpath(mtab, cxt->filename, MNT_ITER_BACKWARD);
        if (!fs)
                return is_active_swap(cxt->filename) ? xstrdup("[SWAP]") : NULL;