[Libguestfs] [PATCH] filesystems: don't try to get the size of btrfs subvolume

Cédric Bosdonnat cbosdonnat at suse.com
Wed Jun 8 12:57:07 UTC 2016


virt-filesystem -l tries to get the size of btrfs subvolumes, which
results in an error. Teach it to skip the subvolumes.
---
 cat/filesystems.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/cat/filesystems.c b/cat/filesystems.c
index f1c2852..f679517 100644
--- a/cat/filesystems.c
+++ b/cat/filesystems.c
@@ -476,9 +476,27 @@ do_output_filesystems (void)
       }
     }
     if ((columns & COLUMN_SIZE)) {
-      size = guestfs_blockdev_getsize64 (g, fses[i]);
-      if (size == -1)
+      CLEANUP_FREE char *device = guestfs_mountable_device (g, fses[i]);
+      CLEANUP_FREE char *subvolume = NULL;
+
+      guestfs_push_error_handler (g, NULL, NULL);
+
+      subvolume = guestfs_mountable_subvolume (g, fses[i]);
+      if (subvolume == NULL && guestfs_last_errno (g) != EINVAL) {
+        fprintf (stderr,
+                 _("%s: cannot determine the subvolume for %s: %s (%d)\n"),
+                guestfs_int_program_name, fses[i],
+                guestfs_last_error (g), guestfs_last_errno (g));
         exit (EXIT_FAILURE);
+      }
+
+      guestfs_pop_error_handler (g);
+
+      if (!device || !subvolume) {
+        size = guestfs_blockdev_getsize64 (g, fses[i]);
+        if (size == -1)
+          exit (EXIT_FAILURE);
+      }
     }
 
     if (is_md (fses[i]))
-- 
2.6.6




More information about the Libguestfs mailing list