[lvm-devel] master - cache: use _cpool for used cache-pools

Zdenek Kabelac zkabelac at sourceware.org
Mon Oct 21 13:33:16 UTC 2019


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=dd7629ea090d4e55de057b772e9eb9470a49e05b
Commit:        dd7629ea090d4e55de057b772e9eb9470a49e05b
Parent:        23f660cf98fd966525672309ee821348edebd014
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Mon Oct 21 12:03:19 2019 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Mon Oct 21 15:31:33 2019 +0200

cache: use _cpool for used cache-pools

When LV gets cached and uses cache-pool - such cache-pool
will now get _cpool suffix automatically.

Thus 'Pool' column for cached LV will now show either _cvol
or _cpool LV.
---
 WHATS_NEW                  |    1 +
 lib/metadata/cache_manip.c |   12 ++++++++++++
 tools/lvconvert.c          |   12 ++++++------
 3 files changed, 19 insertions(+), 6 deletions(-)

diff --git a/WHATS_NEW b/WHATS_NEW
index d6e4c9a..001a12b 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
 Version 2.03.06 - 
 ================================
+  Add _cpool suffix to cache-pool LV name when used by caching LV.
   No longer store extra UUID for cmeta and cdata cachevol layer.
   Enhance activation of cache devices with cachevols.
   Add _cvol in list of protected suffixes and start use it with DM UUID.
diff --git a/lib/metadata/cache_manip.c b/lib/metadata/cache_manip.c
index 5275d24..c20cc49 100644
--- a/lib/metadata/cache_manip.c
+++ b/lib/metadata/cache_manip.c
@@ -430,6 +430,7 @@ int validate_cache_chunk_size(struct cmd_context *cmd, uint32_t chunk_size)
 struct logical_volume *lv_cache_create(struct logical_volume *pool_lv,
 				       struct logical_volume *origin_lv)
 {
+	char cpool_name[NAME_LEN];
 	const struct segment_type *segtype;
 	struct cmd_context *cmd = pool_lv->vg->cmd;
 	struct logical_volume *cache_lv = origin_lv;
@@ -454,6 +455,17 @@ struct logical_volume *lv_cache_create(struct logical_volume *pool_lv,
 	if (!attach_pool_lv(seg, pool_lv, NULL, NULL, NULL))
 		return_NULL;
 
+	if (lv_is_cache_pool(pool_lv)) {
+		/* Used cache-pool gets  _cpool suffix (easy to recognize from _cvol usage) */
+		if (dm_snprintf(cpool_name, sizeof(cpool_name), "%s_cpool", pool_lv->name) < 0) {
+			log_error("Can't prepare new cachepool name for %s.", display_lvname(pool_lv));
+			return NULL;
+		}
+
+		if (!lv_rename_update(cmd, pool_lv, cpool_name, 0))
+			return_NULL;
+	}
+
 	if (!seg->lv->profile) /* Inherit profile from cache-pool */
 		seg->lv->profile = seg->pool_lv->profile;
 
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 9159f57..e033e71 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -4287,6 +4287,7 @@ static int _lvconvert_cachepool_attach_single(struct cmd_context *cmd,
 					  struct logical_volume *lv,
 					  struct processing_handle *handle)
 {
+	struct lv_segment *seg;
 	struct volume_group *vg = lv->vg;
 	struct logical_volume *cachepool_lv;
 	const char *cachepool_name;
@@ -4333,15 +4334,14 @@ static int _lvconvert_cachepool_attach_single(struct cmd_context *cmd,
 			goto out;
 		}
 
-		if (!(cachepool_lv = find_lv(vg, cachepool_name))) {
-			log_error("LV %s cannot be found.", display_lvname(cachepool_lv));
+		/* cachepool_lv is converted into cache-pool data LV */
+		if (!(seg = get_only_segment_using_this_lv(cachepool_lv))) {
+			log_error(INTERNAL_ERROR "LV %s is not a cache pool data volume.",
+				  display_lvname(cachepool_lv));
 			goto out;
 		}
 
-		if (!lv_is_cache_pool(cachepool_lv)) {
-			log_error("LV %s is not a cache pool.", display_lvname(cachepool_lv));
-			goto out;
-		}
+		cachepool_lv = seg->lv;
 	} else {
 		if (!dm_list_empty(&cachepool_lv->segs_using_this_lv)) {
 			log_error("Cache pool %s is already in use.", cachepool_name);




More information about the lvm-devel mailing list