]> sourceware.org Git - lvm2.git/commitdiff
Fix lvcreate processing of %PVS argument.
authorMilan Broz <mbroz@redhat.com>
Wed, 4 Nov 2009 14:47:27 +0000 (14:47 +0000)
committerMilan Broz <mbroz@redhat.com>
Wed, 4 Nov 2009 14:47:27 +0000 (14:47 +0000)
- fix missing unlocking of VG
lvcreate -l 100%PVS -n lv1 vg_test
  Please specify physical volume(s) with %PVS
  Internal error: Volume Group vg_test was not unlocked

- if no PVS specified, use all available

Fix segfault if %PVS in lvresize without PVs list.

WHATS_NEW
tools/lvcreate.c
tools/lvresize.c

index 668b4989fe58eb3512ab241e0087a12577bd30e3..b16bcb4fe48589a9be4c264ca95197af9bd51c25 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.55 -
 ===================================
+  Fix lvcreate and lvresize processing of %PVS argument.
   Tidy some uses of arg_count and introduce arg_is_set.
   Export outnl and indent functions for modules.
   Flush stdout after yes/no prompt.
index c677d6bb910e60d999a9c4a5f21bfc09d5a7286f..f250f371de9aa5c47e4bf27c702ff75e000cabc4 100644 (file)
@@ -160,13 +160,12 @@ static int _update_extents_params(struct volume_group *vg,
                        lp->extents = lp->extents * vg->free_count / 100;
                        break;
                case PERCENT_PVS:
-                       if (!lcp->pv_count) {
-                               log_error("Please specify physical volume(s) "
-                                         "with %%PVS");
-                               return 0;
+                       if (!lcp->pv_count)
+                               lp->extents = lp->extents * vg->extent_count / 100;
+                       else {
+                               pv_extent_count = pv_list_extents_free(lp->pvh);
+                               lp->extents = lp->extents * pv_extent_count / 100;
                        }
-                       pv_extent_count = pv_list_extents_free(lp->pvh);
-                       lp->extents = lp->extents * pv_extent_count / 100;
                        break;
                case PERCENT_LV:
                        log_error("Please express size as %%VG, %%PVS, or "
@@ -584,15 +583,15 @@ int lvcreate(struct cmd_context *cmd, int argc, char **argv)
        }
 
        if (!_update_extents_params(vg, &lp, &lcp)) {
-               stack;
-               return ECMD_FAILED;
+               r = ECMD_FAILED;
+               goto_out;
        }
 
        if (!lv_create_single(vg, &lp)) {
                stack;
                r = ECMD_FAILED;
        }
-
+out:
        unlock_and_release_vg(cmd, vg, lp.vg_name);
        return r;
 }
index 2a4177954503243b6a0f7eb4dd70684f2d6e4aa9..3b3a2eb9eb36b7998650519fae54602da864624c 100644 (file)
@@ -367,8 +367,11 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg,
                        lp->extents = lp->extents * lv->le_count / 100;
                        break;
                case PERCENT_PVS:
-                       pv_extent_count = pv_list_extents_free(pvh);
-                       lp->extents = lp->extents * pv_extent_count / 100;
+                       if (lp->argc) {
+                               pv_extent_count = pv_list_extents_free(pvh);
+                               lp->extents = lp->extents * pv_extent_count / 100;
+                       } else
+                               lp->extents = lp->extents * vg->extent_count / 100;
                        break;
                case PERCENT_NONE:
                        break;
This page took 0.046412 seconds and 5 git commands to generate.