[Libguestfs] [PATCH 4/5] inspect: fix existance check of /dev/mapper devices

Pino Toscano ptoscano at redhat.com
Tue Dec 6 15:29:21 UTC 2016


When checking for the existance of /dev/mapper devices found in the
fstab of a filesystem, using guestfs_exists means they are checked as
files in the guest, while they really appear as devices on the
appliance. Resort using a debug API to check whether a file in the
appliance exists, instead.

Fixes commit 96b6504b09461aeb6850bb2e7b870a0a4c2f5edf.
---
 src/inspect-fs-unix.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/inspect-fs-unix.c b/src/inspect-fs-unix.c
index c833304..7b54a4a 100644
--- a/src/inspect-fs-unix.c
+++ b/src/inspect-fs-unix.c
@@ -1806,6 +1806,19 @@ resolve_fstab_device_diskbyid (guestfs_h *g, const char *part,
   return 0;
 }
 
+static bool
+dev_mapper_exists (guestfs_h *g, const char *device)
+{
+  CLEANUP_FREE char *ret = NULL;
+  const char *const args[] = { device, NULL };
+
+  guestfs_push_error_handler (g, NULL, NULL);
+  ret = guestfs_debug (g, "exists", (char **) args);
+  guestfs_pop_error_handler (g);
+
+  return ret && ret[0] != 0;
+}
+
 /* Resolve block device name to the libguestfs device name, eg.
  * /dev/xvdb1 => /dev/vdb1; and /dev/mapper/VG-LV => /dev/VG/LV.  This
  * assumes that disks were added in the same order as they appear to
@@ -1820,7 +1833,7 @@ resolve_fstab_device (guestfs_h *g, const char *spec, Hash_table *md_map,
   char *type, *slice, *disk, *part;
   int r;
 
-  if (STRPREFIX (spec, "/dev/mapper/") && guestfs_exists (g, spec) > 0) {
+  if (STRPREFIX (spec, "/dev/mapper/") && dev_mapper_exists (g, spec) > 0) {
     /* LVM2 does some strange munging on /dev/mapper paths for VGs and
      * LVs which contain '-' character:
      *
-- 
2.7.4




More information about the Libguestfs mailing list