Re: [Libguestfs] [PATCH] format, make-fs: specify the label on mkfs

Richard W.M. Jones
Mon, 19 Jan 2015 14:43:07 -0000

On Tue, Jan 13, 2015 at 10:38:10AM +0100, Pino Toscano
wrote:
> If specified, pass the label for the new filesystem directly to the
> mkfs (or mkfs_btrfs) call.
>
> This saves one set_label call, mostly.
> ---
>  format/format.c   | 10 ++++++----
>  make-fs/make-fs.c | 28 +++++++++++++++++-----------
>  2 files changed, 23 insertions(+), 15 deletions(-)
>
> diff --git a/format/format.c b/format/format.c
> index 4e6069f..cc371ab 100644
> --- a/format/format.c
> +++ b/format/format.c
> @@ -434,13 +434,15 @@ do_format (void)
>      }
>
>      if (filesystem) {
> -      if (guestfs_mkfs_opts (g, filesystem, dev, -1) == -1)
> -        exit (EXIT_FAILURE);
> +      struct guestfs_mkfs_opts_argv optargs = { .bitmask = 0 };
>
>        if (label) {
> -        if (guestfs_set_label (g, dev, label) == -1)
> -          exit (EXIT_FAILURE);
> +        optargs.label = label;
> +        optargs.bitmask |= GUESTFS_MKFS_OPTS_LABEL_BITMASK;
>        }
> +
> +      if (guestfs_mkfs_opts_argv (g, filesystem, dev, &optargs) == -1)
> +        exit (EXIT_FAILURE);
>
>      if (free_dev)
> diff --git a/make-fs/make-fs.c b/make-fs/make-fs.c
> index 841c202..14729ad 100644
> --- a/make-fs/make-fs.c
> +++ b/make-fs/make-fs.c
> @@ -755,9 +755,15 @@ do_make_fs (const char *input, const char *output_str)
>    /* Create the filesystem. */
>    if (STRNEQ (type, "btrfs")) {
>      int r;
> +    struct guestfs_mkfs_opts_argv optargs = { .bitmask = 0 };
> +
> +    if (label) {
> +      optargs.label = label;
> +      optargs.bitmask |= GUESTFS_MKFS_OPTS_LABEL_BITMASK;
> +    }
>
>      guestfs_push_error_handler (g, NULL, NULL);
> -    r = guestfs_mkfs (g, type, dev);
> +    r = guestfs_mkfs_opts_argv (g, type, dev, &optargs);
>      guestfs_pop_error_handler (g);
>
>      if (r == -1) {
> @@ -774,17 +780,17 @@ do_make_fs (const char *input, const char
*output_str)
>    }
>    else {
>      const char *devs[] = { dev, NULL };
> +    struct guestfs_mkfs_btrfs_argv optargs = { .bitmask = 0 };
> +
> +    optargs.datatype = "single";
> +    optargs.metadata = "single";
> +    optargs.bitmask |= GUESTFS_MKFS_BTRFS_DATATYPE_BITMASK |
GUESTFS_MKFS_BTRFS_METADATA_BITMASK;
> +    if (label) {
> +      optargs.label = label;
> +      optargs.bitmask |= GUESTFS_MKFS_BTRFS_LABEL_BITMASK;
> +    }
>
> -    if (guestfs_mkfs_btrfs (g, (char **) devs,
> -                            GUESTFS_MKFS_BTRFS_DATATYPE,
"single",
> -                            GUESTFS_MKFS_BTRFS_METADATA,
"single",
> -                            -1) == -1)
> -      return -1;
> -  }
> -
> -  /* Set label. */
> -  if (label) {
> -    if (guestfs_set_label (g, dev, label) == -1)
> +    if (guestfs_mkfs_btrfs_argv (g, (char **) devs, &optargs) == -1)
>        return -1;
>    }
>
> --
> 1.9.3

ACK.

Rich.

--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.