X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=daemon%2Flvm.c;h=70c3c9047a97c9400f162ef27987824d22f42d39;hb=27b730a6820b80a49a4da1af9f4c8e8a952f735e;hp=20f2fb333d5db69dd6666e4e0d049fa386d6d35b;hpb=9752039e52d190c7d62281346fd2170a98434c86;p=libguestfs.git diff --git a/daemon/lvm.c b/daemon/lvm.c index 20f2fb3..70c3c90 100644 --- a/daemon/lvm.c +++ b/daemon/lvm.c @@ -20,6 +20,7 @@ #include #include +#include #include #include @@ -267,7 +268,33 @@ do_lvresize (const char *logvol, int mbytes) r = command (NULL, &err, "lvm", "lvresize", - "-L", size, logvol, NULL); + "--force", "-L", size, logvol, NULL); + if (r == -1) { + reply_with_error ("%s", err); + free (err); + return -1; + } + + free (err); + return 0; +} + +int +do_lvresize_free (const char *logvol, int percent) +{ + char *err; + int r; + + if (percent < 0 || percent > 100) { + reply_with_error ("percentage must be [0..100] (was %d)", percent); + return -1; + } + + char size[64]; + snprintf (size, sizeof size, "+%d%%FREE", percent); + + r = command (NULL, &err, + "lvm", "lvresize", "-l", size, logvol, NULL); if (r == -1) { reply_with_error ("%s", err); free (err); @@ -427,6 +454,29 @@ do_pvresize (const char *device) } int +do_pvresize_size (const char *device, int64_t size) +{ + char *err; + int r; + + char buf[32]; + snprintf (buf, sizeof buf, "%" PRIi64 "b", size); + + r = command (NULL, &err, + "lvm", "pvresize", + "--setphysicalvolumesize", buf, + device, NULL); + if (r == -1) { + reply_with_error ("%s: %s", device, err); + free (err); + return -1; + } + + free (err); + return 0; +} + +int do_vg_activate (int activate, char *const *volgroups) { char *err;