[lvm-devel] master - cleanup: postpone confirmation prompt for snapshot

Zdenek Kabelac zkabelac at fedoraproject.org
Fri Aug 15 13:07:40 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=6872adc0ff7e6c72cc94fd15ed5dd910b958386e
Commit:        6872adc0ff7e6c72cc94fd15ed5dd910b958386e
Parent:        ba7796e0550dcc8fcc114bc8eadc6815c34c3f4f
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Aug 15 13:31:53 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Aug 15 15:06:44 2014 +0200

cleanup: postpone confirmation prompt for snapshot

Prompt user for confimation after more checks are done.
(So we avoid case prompting and failing after prompt)
---
 tools/lvchange.c |   39 +++++++++++++++++++--------------------
 1 files changed, 19 insertions(+), 20 deletions(-)

diff --git a/tools/lvchange.c b/tools/lvchange.c
index 992efde..f3bef8b 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -964,26 +964,6 @@ static int _lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
 		return ECMD_FAILED;
 	}
 
-	if (lv_is_cow(lv) && !lv_is_virtual_origin(origin = origin_from_cow(lv)) &&
-	    arg_count(cmd, activate_ARG)) {
-		if (origin->origin_count < 2)
-			snaps_msg[0] = '\0';
-		else if (dm_snprintf(snaps_msg, sizeof(snaps_msg),
-				     " and %u other snapshot(s)",
-				     origin->origin_count - 1) < 0) {
-			log_error("Failed to prepare message.");
-			return ECMD_FAILED;
-		}
-
-		if (!arg_count(cmd, yes_ARG) &&
-		    (yes_no_prompt("Change of snapshot %s will also change its"
-				   " origin %s%s. Proceed? [y/n]: ", lv->name,
-				   origin->name, snaps_msg) == 'n')) {
-			log_error("Logical volume %s not changed.", lv->name);
-			return ECMD_FAILED;
-		}
-	}
-
 	if (lv->status & PVMOVE) {
 		log_error("Unable to change pvmove LV %s", lv->name);
 		if (arg_count(cmd, activate_ARG))
@@ -1019,6 +999,25 @@ static int _lvchange_single(struct cmd_context *cmd, struct logical_volume *lv,
 		return ECMD_FAILED;
 	}
 
+	if (lv_is_cow(lv) && arg_count(cmd, activate_ARG)) {
+		if (origin->origin_count < 2)
+			snaps_msg[0] = '\0';
+		else if (dm_snprintf(snaps_msg, sizeof(snaps_msg),
+				     " and %u other snapshot(s)",
+				     origin->origin_count - 1) < 0) {
+			log_error("Failed to prepare message.");
+			return ECMD_FAILED;
+		}
+
+		if (!arg_count(cmd, yes_ARG) &&
+		    (yes_no_prompt("Change of snapshot %s will also change its "
+				   "origin %s%s. Proceed? [y/n]: ", lv->name,
+				   origin->name, snaps_msg) == 'n')) {
+			log_error("Logical volume %s not changed.", lv->name);
+			return ECMD_FAILED;
+		}
+	}
+
 	/*
 	 * FIXME: DEFAULT_BACKGROUND_POLLING should be "unspecified".
 	 * If --poll is explicitly provided use it; otherwise polling




More information about the lvm-devel mailing list