[lvm-devel] dev-dct-process-latest - lvchange: backup final metadata

David Teigland teigland at fedoraproject.org
Mon Sep 22 15:39:32 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=3adc50ac22f5a3e355db5d143303c8b7dfb7c828
Commit:        3adc50ac22f5a3e355db5d143303c8b7dfb7c828
Parent:        f09f85d027d8833727483efd6077f52d2e5b6ba2
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Sep 19 15:16:26 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Fri Sep 19 15:55:34 2014 +0200

lvchange: backup final metadata

Shift backup after final metadata commit.

Synchronize with wiping.
---
 WHATS_NEW        |    1 +
 tools/lvchange.c |    9 ++++++++-
 2 files changed, 9 insertions(+), 1 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index a2c4577..c5ba9fa 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.112 - 
 =====================================
+  Backup final metadata after resync of mirror/raid.
   Unify handling of --persistent option for lvcreate and lvchange.
   Validate major and minor numbers stored in metadata.
   Use -fPIE when linking -pie executables.
diff --git a/tools/lvchange.c b/tools/lvchange.c
index 8ccbe19..b196591 100644
--- a/tools/lvchange.c
+++ b/tools/lvchange.c
@@ -14,6 +14,7 @@
  */
 
 #include "tools.h"
+#include "memlock.h"
 
 static int lvchange_permission(struct cmd_context *cmd,
 			       struct logical_volume *lv)
@@ -416,7 +417,8 @@ static int lvchange_resync(struct cmd_context *cmd, struct logical_volume *lv)
 		return 0;
 	}
 
-	backup(lv->vg);
+	/* No backup for intermediate metadata, so just unlock memory */
+	memlock_unlock(lv->vg->cmd);
 
 	dm_list_iterate_items(lvl, &device_list) {
 		if (!activate_lv_excl_local(cmd, lvl->lv)) {
@@ -449,6 +451,8 @@ static int lvchange_resync(struct cmd_context *cmd, struct logical_volume *lv)
 		}
 	}
 
+	sync_local_dev_names(lv->vg->cmd);  /* Wait until devices are away */
+
 	/* Put metadata sub-LVs back in place */
 	if (!attach_metadata_devices(seg, &device_list)) {
 		log_error("Failed to reattach %s device after clearing",
@@ -463,11 +467,14 @@ static int lvchange_resync(struct cmd_context *cmd, struct logical_volume *lv)
 	}
 
 	if (!_reactivate_lv(lv, active, exclusive)) {
+		backup(lv->vg);
 		log_error("Failed to reactivate %s after resync",
 			  lv->name);
 		return 0;
 	}
 
+	backup(lv->vg);
+
 	return 1;
 }
 




More information about the lvm-devel mailing list