Cédric Bosdonnat
2016-Jun-15 12:09 UTC
[Libguestfs] [PATCH v2] filesystems: don't try to get the size of btrfs subvolume
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
Richard W.M. Jones
2016-Jun-15 12:16 UTC
Re: [Libguestfs] [PATCH v2] filesystems: don't try to get the size of btrfs subvolume
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
Maybe Matching Threads
- [PATCH] filesystems: don't try to get the size of btrfs subvolume
- [PATCH] filesystems: fix size reporting for filesystems
- Re: [PATCH 3/3] fish: fix btrfs subvolumes display in error case
- [PATCH v2 3/3] fish: fix btrfs subvolumes display in error case
- [PATCH 3/3] fish: fix btrfs subvolumes display in error case