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

2016-06-15 Thread Richard W.M. Jones
On Wed, Jun 15, 2016 at 02:09:49PM +0200, Cédric Bosdonnat wrote:
> 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 | 23 +--
>  1 file changed, 21 insertions(+), 2 deletions(-)
> 
> diff --git a/cat/filesystems.c b/cat/filesystems.c
> index f1c2852..cfdac86 100644
> --- a/cat/filesystems.c
> +++ b/cat/filesystems.c
> @@ -476,9 +476,28 @@ 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: %s\n"),
> +guestfs_int_program_name, fses[i],
> +guestfs_last_error (g),
> +strerror (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]))

Looks OK to me, so ACK.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org

___
Libguestfs mailing list
Libguestfs@redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs


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

2016-06-15 Thread Cédric Bosdonnat
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 | 23 +--
 1 file changed, 21 insertions(+), 2 deletions(-)

diff --git a/cat/filesystems.c b/cat/filesystems.c
index f1c2852..cfdac86 100644
--- a/cat/filesystems.c
+++ b/cat/filesystems.c
@@ -476,9 +476,28 @@ 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: %s\n"),
+guestfs_int_program_name, fses[i],
+guestfs_last_error (g),
+strerror (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

___
Libguestfs mailing list
Libguestfs@redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs