Blame SOURCES/lvm2-2_02_178-lvconvert-use-excl-activation-for-conversion.patch

f0aa83
From 8c34a9b06eab6c40a221730a1b72dcd5e43aabcc Mon Sep 17 00:00:00 2001
f0aa83
From: Zdenek Kabelac <zkabelac@redhat.com>
f0aa83
Date: Fri, 12 Jan 2018 13:34:13 +0100
f0aa83
Subject: [PATCH 13/25] lvconvert: use excl activation for conversion
f0aa83
f0aa83
Use properly exclusive activation when reactivating origin after
f0aa83
snapshot merge (since origin must have been previously also exlusively
f0aa83
activated).
f0aa83
f0aa83
Same applies when converting volumes to thin-pool or cache.
f0aa83
f0aa83
Previously used 'only' local activation incorrectly allowed local
f0aa83
activation of some targets (i.e. raid) - thus 'leaking' chance to
f0aa83
activate same device on another node - which can be a problem
f0aa83
for device types like raid.
f0aa83
f0aa83
(cherry picked from commit e86910b052ef50dfdaad104d17bda679f698e31f)
f0aa83
f0aa83
Conflicts:
f0aa83
	WHATS_NEW
f0aa83
---
f0aa83
 WHATS_NEW                  |  1 +
f0aa83
 lib/metadata/cache_manip.c |  2 +-
f0aa83
 lib/metadata/pool_manip.c  |  6 +++---
f0aa83
 tools/lvconvert.c          | 16 ++++++++--------
f0aa83
 4 files changed, 13 insertions(+), 12 deletions(-)
f0aa83
f0aa83
diff --git a/WHATS_NEW b/WHATS_NEW
f0aa83
index 9375a86..c997206 100644
f0aa83
--- a/WHATS_NEW
f0aa83
+++ b/WHATS_NEW
f0aa83
@@ -1,5 +1,6 @@
f0aa83
 Version 2.02.178 - 
f0aa83
 =====================================
f0aa83
+  Preserve exclusive activation during thin snaphost merge.
f0aa83
   Avoid exceeding array bounds in allocation tag processing.
f0aa83
 
f0aa83
 Version 2.02.177 - 18th December 2017
f0aa83
diff --git a/lib/metadata/cache_manip.c b/lib/metadata/cache_manip.c
f0aa83
index 55ed724..97a3339 100644
f0aa83
--- a/lib/metadata/cache_manip.c
f0aa83
+++ b/lib/metadata/cache_manip.c
f0aa83
@@ -960,7 +960,7 @@ int wipe_cache_pool(struct logical_volume *cache_pool_lv)
f0aa83
 	}
f0aa83
 
f0aa83
 	cache_pool_lv->status |= LV_TEMPORARY;
f0aa83
-	if (!activate_lv_local(cache_pool_lv->vg->cmd, cache_pool_lv)) {
f0aa83
+	if (!activate_lv_excl_local(cache_pool_lv->vg->cmd, cache_pool_lv)) {
f0aa83
 		log_error("Aborting. Failed to activate cache pool %s.",
f0aa83
 			  display_lvname(cache_pool_lv));
f0aa83
 		return 0;
f0aa83
diff --git a/lib/metadata/pool_manip.c b/lib/metadata/pool_manip.c
f0aa83
index 18e4e65..b832db7 100644
f0aa83
--- a/lib/metadata/pool_manip.c
f0aa83
+++ b/lib/metadata/pool_manip.c
f0aa83
@@ -526,7 +526,7 @@ int create_pool(struct logical_volume *pool_lv,
f0aa83
 		 * or directly converted to invisible device via suspend/resume
f0aa83
 		 */
f0aa83
 		pool_lv->status |= LV_TEMPORARY;
f0aa83
-		if (!activate_lv_local(pool_lv->vg->cmd, pool_lv)) {
f0aa83
+		if (!activate_lv_excl_local(pool_lv->vg->cmd, pool_lv)) {
f0aa83
 			log_error("Aborting. Failed to activate pool metadata %s.",
f0aa83
 				  display_lvname(pool_lv));
f0aa83
 			goto bad;
f0aa83
@@ -538,7 +538,7 @@ int create_pool(struct logical_volume *pool_lv,
f0aa83
 		}
f0aa83
 		pool_lv->status &= ~LV_TEMPORARY;
f0aa83
 		/* Deactivates cleared metadata LV */
f0aa83
-		if (!deactivate_lv_local(pool_lv->vg->cmd, pool_lv)) {
f0aa83
+		if (!deactivate_lv(pool_lv->vg->cmd, pool_lv)) {
f0aa83
 			log_error("Aborting. Could not deactivate pool metadata %s.",
f0aa83
 				  display_lvname(pool_lv));
f0aa83
 			return 0;
f0aa83
@@ -660,7 +660,7 @@ static struct logical_volume *_alloc_pool_metadata_spare(struct volume_group *vg
f0aa83
 		return_0;
f0aa83
 
f0aa83
 	/* Spare LV should not be active */
f0aa83
-	if (!deactivate_lv_local(vg->cmd, lv)) {
f0aa83
+	if (!deactivate_lv(vg->cmd, lv)) {
f0aa83
 		log_error("Unable to deactivate pool metadata spare LV. "
f0aa83
 			  "Manual intervention required.");
f0aa83
 		return 0;
f0aa83
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
f0aa83
index deb7cc9..fee0a4e 100644
f0aa83
--- a/tools/lvconvert.c
f0aa83
+++ b/tools/lvconvert.c
f0aa83
@@ -1970,14 +1970,14 @@ static int _lvconvert_snapshot(struct cmd_context *cmd,
f0aa83
 		log_warn("WARNING: %s not zeroed.", snap_name);
f0aa83
 	else {
f0aa83
 		lv->status |= LV_TEMPORARY;
f0aa83
-		if (!activate_lv_local(cmd, lv) ||
f0aa83
+		if (!activate_lv_excl_local(cmd, lv) ||
f0aa83
 		    !wipe_lv(lv, (struct wipe_params) { .do_zero = 1 })) {
f0aa83
 			log_error("Aborting. Failed to wipe snapshot exception store.");
f0aa83
 			return 0;
f0aa83
 		}
f0aa83
 		lv->status &= ~LV_TEMPORARY;
f0aa83
 		/* Deactivates cleared metadata LV */
f0aa83
-		if (!deactivate_lv_local(lv->vg->cmd, lv)) {
f0aa83
+		if (!deactivate_lv(lv->vg->cmd, lv)) {
f0aa83
 			log_error("Failed to deactivate zeroed snapshot exception store.");
f0aa83
 			return 0;
f0aa83
 		}
f0aa83
@@ -2170,7 +2170,7 @@ static int _lvconvert_merge_thin_snapshot(struct cmd_context *cmd,
f0aa83
 		log_print_unless_silent("Volume %s replaced origin %s.",
f0aa83
 					display_lvname(origin), display_lvname(lv));
f0aa83
 
f0aa83
-		if (origin_is_active && !activate_lv(cmd, lv)) {
f0aa83
+		if (origin_is_active && !activate_lv_excl_local(cmd, lv)) {
f0aa83
 			log_error("Failed to reactivate origin %s.",
f0aa83
 				  display_lvname(lv));
f0aa83
 			return 0;
f0aa83
@@ -2278,13 +2278,13 @@ static int _lvconvert_thin_pool_repair(struct cmd_context *cmd,
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
 
f0aa83
-	if (!activate_lv_local(cmd, pmslv)) {
f0aa83
+	if (!activate_lv_excl_local(cmd, pmslv)) {
f0aa83
 		log_error("Cannot activate pool metadata spare volume %s.",
f0aa83
 			  pmslv->name);
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
 
f0aa83
-	if (!activate_lv_local(cmd, mlv)) {
f0aa83
+	if (!activate_lv_excl_local(cmd, mlv)) {
f0aa83
 		log_error("Cannot activate thin pool metadata volume %s.",
f0aa83
 			  mlv->name);
f0aa83
 		goto deactivate_pmslv;
f0aa83
@@ -2476,13 +2476,13 @@ static int _lvconvert_cache_repair(struct cmd_context *cmd,
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
 
f0aa83
-	if (!activate_lv_local(cmd, pmslv)) {
f0aa83
+	if (!activate_lv_excl_local(cmd, pmslv)) {
f0aa83
 		log_error("Cannot activate pool metadata spare volume %s.",
f0aa83
 			  pmslv->name);
f0aa83
 		return 0;
f0aa83
 	}
f0aa83
 
f0aa83
-	if (!activate_lv_local(cmd, mlv)) {
f0aa83
+	if (!activate_lv_excl_local(cmd, mlv)) {
f0aa83
 		log_error("Cannot activate cache pool metadata volume %s.",
f0aa83
 			  mlv->name);
f0aa83
 		goto deactivate_pmslv;
f0aa83
@@ -3130,7 +3130,7 @@ static int _lvconvert_to_pool(struct cmd_context *cmd,
f0aa83
 
f0aa83
 		if (zero_metadata) {
f0aa83
 			metadata_lv->status |= LV_TEMPORARY;
f0aa83
-			if (!activate_lv_local(cmd, metadata_lv)) {
f0aa83
+			if (!activate_lv_excl_local(cmd, metadata_lv)) {
f0aa83
 				log_error("Aborting. Failed to activate metadata lv.");
f0aa83
 				goto bad;
f0aa83
 			}
f0aa83
-- 
f0aa83
1.8.3.1
f0aa83