[lvm-devel] master - cache: check activation of volume activated

Zdenek Kabelac zkabelac at fedoraproject.org
Mon Oct 6 13:33:10 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=b37203c8193ea47d2de1033b5e57ae5bd1360df4
Commit:        b37203c8193ea47d2de1033b5e57ae5bd1360df4
Parent:        75119d85b3dfe9f53187f37130fd6d215705c166
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Fri Oct 3 23:48:42 2014 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 6 15:18:06 2014 +0200

cache: check activation of volume activated

volume_list may silently skip activation which is then still reported as
success.
---
 WHATS_NEW                  |    1 +
 lib/metadata/cache_manip.c |   15 ++++++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index a11fa16..275d666 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.02.112 - 
 =====================================
+  Properly check if activation of removed cached LV really activated.
   Lvremoving cached LV removes cachepool (keep with lvconvert --splitcache).
   Always remove spare LV with last removed pool volume.
   Support lvconvert --splitcache and --uncache of cached LV.
diff --git a/lib/metadata/cache_manip.c b/lib/metadata/cache_manip.c
index 80214c9..ed08726 100644
--- a/lib/metadata/cache_manip.c
+++ b/lib/metadata/cache_manip.c
@@ -229,11 +229,16 @@ int lv_cache_remove(struct logical_volume *cache_lv)
 		return 0;
 	}
 
-	/* Active volume is needed (writeback only?) */
-	if (!lv_is_active_locally(cache_lv) &&
-	    !activate_lv_excl_local(cache_lv->vg->cmd, cache_lv)) {
-		log_error("Failed to active cache locally %s.", cache_lv->name);
-		return 0;
+	/* Localy active volume is needed (writeback only?) */
+	if (!lv_is_active_locally(cache_lv)) {
+		cache_lv->status |= LV_TEMPORARY;
+		if (!activate_lv_excl_local(cache_lv->vg->cmd, cache_lv) ||
+		    !lv_is_active_locally(cache_lv)) {
+			log_error("Failed to active cache locally %s.",
+				  display_lvname(cache_lv));
+			return 0;
+		}
+		cache_lv->status &= ~LV_TEMPORARY;
 	}
 
 	/*




More information about the lvm-devel mailing list