[lvm-devel] master - lvresize: improve poolmetadatasize
Zdenek Kabelac
zkabelac at fedoraproject.org
Tue Jun 11 17:50:16 UTC 2013
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=bb70b38021992dd462a94d40527a315ce1e692fd
Commit: bb70b38021992dd462a94d40527a315ce1e692fd
Parent: 6ff8b6d7548b218f678c45f768b8383038db1855
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Jun 11 19:46:42 2013 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Tue Jun 11 19:46:42 2013 +0200
lvresize: improve poolmetadatasize
Fix the usecase when only PV list is specified.
With --poolmetadatasize PV list is used for metadata extents.
Without --poolmetadatasize PV list is used for 100% extension of LV.
Handle the case, when nothing could be resized (i.e. in dmeventd)
---
tools/lvresize.c | 13 +++++++++++--
1 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/tools/lvresize.c b/tools/lvresize.c
index 3e2c281..9139228 100644
--- a/tools/lvresize.c
+++ b/tools/lvresize.c
@@ -214,12 +214,15 @@ static int _lvresize_params(struct cmd_context *cmd, int argc, char **argv,
* Allow omission of extents and size if the user has given us
* one or more PVs. Most likely, the intent was "resize this
* LV the best you can with these PVs"
+ * If only --poolmetadatasize is specified with list of PVs,
+ * then metadata will be extended there.
*/
lp->sizeargs = arg_count(cmd, extents_ARG) + arg_count(cmd, size_ARG);
if ((lp->sizeargs == 0) && (argc >= 2)) {
lp->extents = 100;
lp->percent = PERCENT_PVS;
lp->sign = SIGN_PLUS;
+ lp->sizeargs = !lp->poolmetadatasize ? 1 : 0;
} else if ((lp->sizeargs != 1) &&
((lp->sizeargs == 2) ||
!arg_count(cmd, poolmetadatasize_ARG))) {
@@ -429,8 +432,11 @@ static int _lvresize_poolmetadata(struct cmd_context *cmd, struct volume_group *
return 2;
}
+ if (!lp->sizeargs && !archive(vg))
+ return_0;
+
log_print_unless_silent("Extending logical volume %s to %s.",
- lv->name,
+ lv->name,
display_size(cmd, (uint64_t) extents * vg->extent_size));
mseg = last_seg(lv);
seg_mirrors = lv_mirror_count(lv);
@@ -575,7 +581,7 @@ static int _lvresize(struct cmd_context *cmd, struct volume_group *vg,
return ECMD_FAILED;
}
- if (lp->sizeargs || (pvh != &vg->pvs)) { /* TODO: reindent or move to function */
+ if (lp->sizeargs) { /* TODO: reindent or move to function */
switch(lp->percent) {
case PERCENT_VG:
@@ -954,6 +960,9 @@ metadata_resize:
lock_lv = lv;
}
+ if (!lock_lv)
+ return ECMD_PROCESSED; /* Nothing to do */
+
/* store vg on disk(s) */
if (!vg_write(vg)) {
stack;
More information about the lvm-devel
mailing list