[Libguestfs] [PATCH] daemon: drop error message check in do_part_expand_gpt

Richard W.M. Jones rjones at redhat.com
Tue Apr 16 07:54:51 UTC 2019


On Mon, Apr 15, 2019 at 02:06:29PM +0300, Denis Plotnikov wrote:
> part-expand-gpt takes extreme cautions and doesn't proceed to writing
> to the disk if the preliminary dry run of sgdisk has generated any
> warnings on stdout.
> 
> This blocks the use of part-expand-gpt on disk shrink (with disk
> resize being the main usecase for part-expand-gpt), because sgdisk dry
> run produces a warning in that case.
> 
> So remove the excessive safety check, and leave it up to the caller.
> 
> Signed-off-by: Denis Plotnikov <dplotnikov at virtuozzo.com>
> Reviewed-by: Roman Kagan <rkagan at virtuozzo.com>
> ---
>  daemon/parted.c                | 20 +-------------------
>  tests/gdisk/test-expand-gpt.pl | 24 +++++++++++++++++++++---
>  2 files changed, 22 insertions(+), 22 deletions(-)
> 
> diff --git a/daemon/parted.c b/daemon/parted.c
> index 070ed4790..2cc714d64 100644
> --- a/daemon/parted.c
> +++ b/daemon/parted.c
> @@ -699,26 +699,8 @@ do_part_expand_gpt(const char *device)
>  {
>    CLEANUP_FREE char *err = NULL;
>  
> -  /* If something is broken, sgdisk may try to correct it.
> -   * (e.g. recreate partition table and so on).
> -   * We do not want such behavior, so dry-run at first.*/
>    int r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR,
> -                    "sgdisk", "--pretend", "-e", device, NULL);
> -
> -  if (r == -1) {
> -    reply_with_error ("%s --pretend -e %s: %s", "sgdisk", device, err);
> -    return -1;
> -  }
> -  if (err && strlen(err) != 0) {
> -    /* Unexpected actions. */
> -    reply_with_error ("%s --pretend -e %s: %s", "sgdisk", device, err);
> -    return -1;
> -  }
> -  free(err);
> -
> -  /* Now we can do a real run. */
> -  r = commandf (NULL, &err, COMMAND_FLAG_FOLD_STDOUT_ON_STDERR,
> -                "sgdisk", "-e", device, NULL);
> +                    "sgdisk", "-e", device, NULL);
>  
>    if (r == -1) {
>      reply_with_error ("%s -e %s: %s", "sgdisk", device, err);
> diff --git a/tests/gdisk/test-expand-gpt.pl b/tests/gdisk/test-expand-gpt.pl
> index 4d647f1af..f17d034ee 100755
> --- a/tests/gdisk/test-expand-gpt.pl
> +++ b/tests/gdisk/test-expand-gpt.pl
> @@ -54,11 +54,29 @@ sub tests {
>  	my $end_sectors = 100 * 1024 * 2 - $output;
>  	die unless $end_sectors <= 34;
>  
> -	# Negative tests.
> +	# Negative test.
>  	eval { $g->part_expand_gpt ("/dev/sdb") };
>  	die unless $@;
> -	eval { $g->part_expand_gpt ("/dev/sda1") };
> -	die unless $@;
> +
> +	$g->close ();
> +
> +	# Disk shrink test
> +	die if system ("qemu-img resize --shrink disk_gpt.img 50M &>/dev/null");
> +
> +	$g = Sys::Guestfs->new ();
> +
> +	$g->add_drive ("disk_gpt.img", format => "qcow2");
> +	$g->launch ();
> +
> +	die if $g->part_expand_gpt ("/dev/sda");
> +
> +	my $output = $g->debug ("sh", ["sgdisk", "-p", "/dev/sda"]);
> +	die if $output eq "";
> +	$output =~ s/\n/ /g;
> +	$output =~ s/.*last usable sector is (\d+).*/$1/g;
> +
> +	my $end_sectors = 50 * 1024 * 2 - $output;
> +	die unless $end_sectors <= 34;
>  }
>  
>  eval { tests() };

OK I'll run the tests on this one and if it works I'll push it.

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://people.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list