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 <[email protected]> > Reviewed-by: Roman Kagan <[email protected]> > --- > 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/ _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
