[lvm-devel] master - cache: single code for removal of cached volume

Zdenek Kabelac zkabelac at sourceware.org
Thu Oct 17 11:05:17 UTC 2019


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=5938cde11bb7298104871acf47d60b0fd5835b71
Commit:        5938cde11bb7298104871acf47d60b0fd5835b71
Parent:        9969361b51d0b69fa04a6a7cd87ca74208b2437a
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Thu Oct 17 12:53:54 2019 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Thu Oct 17 13:03:50 2019 +0200

cache: single code for removal of cached volume

Use same routine for dropping cached LV for cachevol and cachepool.
---
 lib/metadata/lv_manip.c |   31 ++++++++++++++++---------------
 1 files changed, 16 insertions(+), 15 deletions(-)

diff --git a/lib/metadata/lv_manip.c b/lib/metadata/lv_manip.c
index b3a749d..b5b9a4a 100644
--- a/lib/metadata/lv_manip.c
+++ b/lib/metadata/lv_manip.c
@@ -6275,19 +6275,6 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 	if (!lockd_lv(cmd, lock_lv, "ex", LDLV_PERSISTENT))
 		return_0;
 
-	if (lv_is_cache(lv) && lv_is_cache_vol(first_seg(lv)->pool_lv)) {
-		struct logical_volume *cachevol_lv = first_seg(lv)->pool_lv;
-
-		if (!lv_cache_remove(lv)) {
-			log_error("Failed to detach cache from %s", display_lvname(lv));
-			return 0;
-		}
-		if (!lv_remove_single(cmd, cachevol_lv, force, suppress_remove_message)) {
-			log_error("Failed to remove cachevol %s.", display_lvname(cachevol_lv));
-			return 0;
-		}
-	}
-
 	/* FIXME Ensure not referred to by another existing LVs */
 	ask_discard = find_config_tree_bool(cmd, devices_issue_discards_CFG, NULL);
 
@@ -6339,7 +6326,22 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 	}
 
 	if (lv_is_cache(lv) && !lv_is_pending_delete(lv)) {
-		if (!lv_remove_single(cmd, first_seg(lv)->pool_lv, force,
+		/* Handles both cachepool & cachevol based cached LVs.
+		 * It's placed before deactivation, so it can try to uncache
+		 * 'active' LV if possible
+		 */
+		struct logical_volume *cachevol_lv = first_seg(lv)->pool_lv;
+
+		if (lv_is_cache_pool(cachevol_lv))
+			is_last_pool = 1;
+
+		if (!archive(vg))
+			return_0;
+
+		if (!lv_cache_remove(lv))
+			return_0;
+
+		if (!lv_remove_single(cmd, cachevol_lv, force,
 				      suppress_remove_message)) {
 			if (force < DONT_PROMPT_OVERRIDE) {
 				log_error("Failed to uncache %s.", display_lvname(lv));
@@ -6349,7 +6351,6 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
 			log_print_unless_silent("Ignoring uncache failure of %s.",
 						display_lvname(lv));
 		}
-		is_last_pool = 1;
 	}
 
 	/* Used cache pool, COW or historical LV cannot be activated */




More information about the lvm-devel mailing list