From: Alasdair Kergon Date: Wed, 26 Oct 2005 15:21:13 +0000 (+0000) Subject: attempt to cope with uuid transition X-Git-Tag: v1_02_00~13 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=fc7e6f574a6db214bdb6f08eda8b38a9db21e2b6;p=dm.git attempt to cope with uuid transition --- diff --git a/lib/libdm-deptree.c b/lib/libdm-deptree.c index 2b05823..da1eeaf 100644 --- a/lib/libdm-deptree.c +++ b/lib/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 */