[lvm-devel] master - vdo: allow passing renamed vdopool name to kernel

Zdenek Kabelac zkabelac at sourceware.org
Wed Sep 23 12:59:33 UTC 2020


Gitweb:        https://sourceware.org/git/?p=lvm2.git;a=commitdiff;h=50a37948b5b2245a8f5d7d78aa88fa0679dfe0e5
Commit:        50a37948b5b2245a8f5d7d78aa88fa0679dfe0e5
Parent:        7c19186271d3bf37412b7e7dcc271bc9b79f9f4a
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Wed Sep 23 13:20:28 2020 +0200
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Sep 23 13:20:28 2020 +0200

vdo: allow passing renamed vdopool name to kernel

Although kernel does not allow to load a new dm table
with renamed vdopool, at least make lvm2 code ready
it it every will get supported.
---
 device_mapper/all.h           | 1 +
 device_mapper/libdm-deptree.c | 3 ++-
 lib/vdo/vdo.c                 | 6 ++++--
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/device_mapper/all.h b/device_mapper/all.h
index df47d1a5a..1080d25ad 100644
--- a/device_mapper/all.h
+++ b/device_mapper/all.h
@@ -1019,6 +1019,7 @@ int dm_tree_node_add_integrity_target(struct dm_tree_node *node,
  */
 int dm_tree_node_add_vdo_target(struct dm_tree_node *node,
 				uint64_t size,
+				const char *vdo_pool_name,
 				const char *data_uuid,
 				uint64_t data_size,
 				const struct dm_vdo_target_params *param);
diff --git a/device_mapper/libdm-deptree.c b/device_mapper/libdm-deptree.c
index 2722a2c3b..653dd0959 100644
--- a/device_mapper/libdm-deptree.c
+++ b/device_mapper/libdm-deptree.c
@@ -4360,6 +4360,7 @@ int dm_tree_node_add_cache_target_base(struct dm_tree_node *node,
 
 int dm_tree_node_add_vdo_target(struct dm_tree_node *node,
 				uint64_t size,
+				const char *vdo_pool_name,
 				const char *data_uuid,
 				uint64_t data_size,
 				const struct dm_vdo_target_params *vtp)
@@ -4381,7 +4382,7 @@ int dm_tree_node_add_vdo_target(struct dm_tree_node *node,
 		return_0;
 
 	seg->vdo_params = *vtp;
-	seg->vdo_name = node->name;
+	seg->vdo_name = vdo_pool_name;
 	seg->vdo_data_size = data_size;
 
 	node->props.send_messages = 2;
diff --git a/lib/vdo/vdo.c b/lib/vdo/vdo.c
index ab6d00825..c43a5dc26 100644
--- a/lib/vdo/vdo.c
+++ b/lib/vdo/vdo.c
@@ -362,19 +362,21 @@ static int _vdo_pool_add_target_line(struct dev_manager *dm,
 				     struct dm_tree_node *node, uint64_t len,
 				     uint32_t *pvmove_mirror_count __attribute__((unused)))
 {
-	char *data_uuid;
+	char *vdo_pool_name, *data_uuid;
 
 	if (!seg_is_vdo_pool(seg)) {
 		log_error(INTERNAL_ERROR "Passed segment is not VDO pool.");
 		return 0;
 	}
+	if (!(vdo_pool_name = dm_build_dm_name(mem, seg->lv->vg->name, seg->lv->name, lv_layer(seg->lv))))
+		return_0;
 
 	if (!(data_uuid = build_dm_uuid(mem, seg_lv(seg, 0), lv_layer(seg_lv(seg, 0)))))
 		return_0;
 
 	/* VDO uses virtual size instead of its physical size */
 	if (!dm_tree_node_add_vdo_target(node, get_vdo_pool_virtual_size(seg),
-					 data_uuid, seg_lv(seg, 0)->size,
+					 vdo_pool_name, data_uuid, seg_lv(seg, 0)->size,
 					 &seg->vdo_params))
 		return_0;
 




More information about the lvm-devel mailing list