From 2e95949b807927cdbee071e62715906bcc2c24ef Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Wed, 26 Oct 2005 15:21:13 +0000 Subject: [PATCH] attempt to cope with uuid transition --- libdm/libdm-deptree.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/libdm/libdm-deptree.c b/libdm/libdm-deptree.c index 2b05823c8..da1eeafa2 100644 --- a/libdm/libdm-deptree.c +++ b/libdm/libdm-deptree.c @@ -362,6 +362,30 @@ int dm_deptree_node_num_children(struct deptree_node *node, uint32_t inverted) return list_size(&node->uses); } +/* + * Returns 1 if no prefix supplied + */ +static int _uuid_prefix_matches(const char *uuid, const char *uuid_prefix, size_t uuid_prefix_len) +{ + if (!uuid_prefix) + return 1; + + if (!strncmp(uuid, uuid_prefix, uuid_prefix_len)) + return 1; + + /* Handle transition: active device uuids might be missing the prefix */ + if (uuid_prefix_len <= 4) + return 0; + + if (!strcmp(uuid, "LVM-") || strcmp(uuid_prefix, "LVM-")) + return 0; + + if (!strncmp(uuid, uuid_prefix + 4, uuid_prefix_len - 4)) + return 1; + + return 0; +} + /* * Returns 1 if no children. */ @@ -392,7 +416,7 @@ static int _children_suspended(struct deptree_node *node, } /* Ignore if it doesn't belong to this VG */ - if (uuid_prefix && strncmp(uuid, uuid_prefix, uuid_prefix_len)) + if (!_uuid_prefix_matches(uuid, uuid_prefix, uuid_prefix_len)) continue; if (!(dinfo = dm_deptree_node_get_info(dlink->node))) { @@ -563,7 +587,7 @@ int dm_deptree_deactivate_children(struct deptree_node *dnode, } /* Ignore if it doesn't belong to this VG */ - if (uuid_prefix && strncmp(uuid, uuid_prefix, uuid_prefix_len)) + if (!_uuid_prefix_matches(uuid, uuid_prefix, uuid_prefix_len)) continue; /* Refresh open_count */ @@ -614,7 +638,7 @@ int dm_deptree_suspend_children(struct deptree_node *dnode, } /* Ignore if it doesn't belong to this VG */ - if (uuid_prefix && strncmp(uuid, uuid_prefix, uuid_prefix_len)) + if (!_uuid_prefix_matches(uuid, uuid_prefix, uuid_prefix_len)) continue; /* Ensure immediate parents are already suspended */