[lvm-devel] master - pool: delay conversion prompt
Zdenek Kabelac
zkabelac at fedoraproject.org
Wed Jul 2 08:48:42 UTC 2014
Gitweb: http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=7bdf4719e8327a74262e47adfe78ad81a26ff4c0
Commit: 7bdf4719e8327a74262e47adfe78ad81a26ff4c0
Parent: 3af761ba167236a2d66f8687ade5db6311498d06
Author: Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate: Tue Jul 1 11:06:36 2014 +0200
Committer: Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Jul 2 10:45:39 2014 +0200
pool: delay conversion prompt
First validate as much params as possible before prompting user
about conversion to data and metadata LV.
---
WHATS_NEW | 1 +
tools/lvconvert.c | 91 +++++++++++++++++++++++++++++------------------------
2 files changed, 51 insertions(+), 41 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index 8934d6f..dfbb4e3 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.108 -
=================================
+ Postpone thin pool lvconvert prompts (2.02.107).
Require --yes option to skip prompt to lvconvert thin pool chunksize.
Support lvremove -ff to remove thin volumes from broken thin pools.
Require --yes to skip raid repair prompt.
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index be2c916..ca58a1f 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2680,7 +2680,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
}
}
- data_lv = pool_lv;
if (lv_is_thin_type(pool_lv) && !lp->pool_metadata_lv_name) {
log_error("Can't use thin logical volume %s/%s for thin pool data.",
pool_lv->vg->name, pool_lv->name);
@@ -2707,17 +2706,6 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
pool_lv->vg->name, pool_lv->name);
return 0;
}
- } else {
- log_warn("WARNING: Converting \"%s/%s\" logical volume to pool's data volume.",
- pool_lv->vg->name, pool_lv->name);
- log_warn("THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)");
-
- if (!lp->yes &&
- yes_no_prompt("Do you really want to convert \"%s/%s\"? [y/n]: ",
- pool_lv->vg->name, pool_lv->name) == 'n') {
- log_error("Conversion aborted.");
- return 0;
- }
}
if ((dm_snprintf(metadata_name, sizeof(metadata_name), "%s%s",
@@ -2782,26 +2770,12 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
/* Swap normal LV with pool's metadata LV ? */
if (lv_is_thin_pool(pool_lv)) {
if (!deactivate_lv(cmd, metadata_lv)) {
- log_error("Aborting. Failed to deactivate thin metadata lv.");
- return 0;
- }
- if (!lp->yes &&
- yes_no_prompt("Do you want to swap metadata of %s/%s pool with "
- "volume %s/%s? [y/n]: ",
- pool_lv->vg->name, pool_lv->name,
- pool_lv->vg->name, metadata_lv->name) == 'n') {
- log_error("Conversion aborted.");
+ log_error("Aborting. Failed to deactivate LV %s/%s.",
+ metadata_lv->vg->name, metadata_lv->name);
return 0;
}
+
seg = first_seg(pool_lv);
- /* Swap names between old and new metadata LV */
- if (!detach_pool_metadata_lv(seg, &pool_metadata_lv))
- return_0;
- old_name = metadata_lv->name;
- if (!lv_rename_update(cmd, metadata_lv, "pvmove_tmeta", 0))
- return_0;
- if (!lv_rename_update(cmd, pool_metadata_lv, old_name, 0))
- return_0;
if (!arg_count(cmd, chunksize_ARG))
lp->chunk_size = seg->chunk_size;
@@ -2825,6 +2799,25 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
display_size(cmd, lp->chunk_size),
pool_lv->vg->name, pool_lv->name);
}
+
+ if (!lp->yes &&
+ yes_no_prompt("Do you want to swap metadata of %s/%s pool with "
+ "volume %s/%s? [y/n]: ",
+ pool_lv->vg->name, pool_lv->name,
+ metadata_lv->vg->name, metadata_lv->name) == 'n') {
+ log_error("Conversion aborted.");
+ return 0;
+ }
+
+ /* Swap names between old and new metadata LV */
+ if (!detach_pool_metadata_lv(seg, &pool_metadata_lv))
+ return_0;
+ old_name = metadata_lv->name;
+ if (!lv_rename_update(cmd, metadata_lv, "pvmove_tmeta", 0))
+ return_0;
+ if (!lv_rename_update(cmd, pool_metadata_lv, old_name, 0))
+ return_0;
+
if (!arg_count(cmd, discards_ARG))
lp->discards = seg->discards;
if (!arg_count(cmd, zero_ARG))
@@ -2834,18 +2827,8 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
}
if (!deactivate_lv(cmd, metadata_lv)) {
- log_error("Aborting. Failed to deactivate thin metadata lv.");
- return 0;
- }
-
- log_warn("WARNING: Converting \"%s/%s\" logical volume to pool's metadata volume.",
- metadata_lv->vg->name, metadata_lv->name);
- log_warn("THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)");
-
- if (!lp->yes &&
- yes_no_prompt("Do you really want to convert \"%s/%s\"? [y/n]: ",
- metadata_lv->vg->name, metadata_lv->name) == 'n') {
- log_error("Conversion aborted.");
+ log_error("Aborting. Failed to deactivate \"%s/%s\".",
+ metadata_lv->vg->name, metadata_lv->name);
return 0;
}
@@ -2867,9 +2850,21 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
display_size(cmd, min_metadata_size));
return 0;
}
+
if (!_lvconvert_update_pool_params(pool_lv, lp))
return_0;
+ log_warn("WARNING: Converting logical volume %s/%s to pool's metadata volume.",
+ metadata_lv->vg->name, metadata_lv->name);
+ log_warn("THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)");
+
+ if (!lp->yes &&
+ yes_no_prompt("Do you really want to convert %s/%s? [y/n]: ",
+ metadata_lv->vg->name, metadata_lv->name) == 'n') {
+ log_error("Conversion aborted.");
+ return 0;
+ }
+
metadata_lv->status |= LV_TEMPORARY;
if (!activate_lv_local(cmd, metadata_lv)) {
log_error("Aborting. Failed to activate metadata lv.");
@@ -2892,6 +2887,20 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
lp->pvh, lp->poolmetadataspare))
return_0;
+ if (!lv_is_thin_pool(pool_lv)) {
+ log_warn("WARNING: Converting logical volume %s/%s to pool's data volume.",
+ pool_lv->vg->name, pool_lv->name);
+ log_warn("THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)");
+
+ if (!lp->yes &&
+ yes_no_prompt("Do you really want to convert %s/%s? [y/n]: ",
+ pool_lv->vg->name, pool_lv->name) == 'n') {
+ log_error("Conversion aborted.");
+ return 0;
+ }
+ }
+
+ data_lv = pool_lv;
old_name = data_lv->name; /* Use for pool name */
/*
* Since we wish to have underlaying devs to match _[ct]data
More information about the lvm-devel
mailing list