[dm-devel] [PATCH v2 08/12] libmultipath: don't treat multi-linear mappings as partitions
Martin Wilck
mwilck at suse.com
Mon May 15 15:37:18 UTC 2017
dm_type is used in libmultipath only to check whether a mapping
is "linear", with the intention to test if it represents a
"partition". This test returns TRUE also for mappings with
multiple targets, the first of which happens to be a linear
mapping into the target device. This is questionable, it's
hard to assign a "type" to such maps anyway.
Fix this by returning an error for multi-target maps.
This is analogous to the patch
"kpartx: don't treat multi-linear mappings as partitions".
Signed-off-by: Martin Wilck <mwilck at suse.com>
---
libmultipath/devmapper.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/libmultipath/devmapper.c b/libmultipath/devmapper.c
index 5fb9d9ac..c19dcb62 100644
--- a/libmultipath/devmapper.c
+++ b/libmultipath/devmapper.c
@@ -572,7 +572,7 @@ out:
* returns:
* 1 : match
* 0 : no match
- * -1 : empty map
+ * -1 : empty map, or more than 1 target
*/
int dm_type(const char *name, char *type)
{
@@ -594,10 +594,11 @@ int dm_type(const char *name, char *type)
goto out;
/* Fetch 1st target */
- dm_get_next_target(dmt, NULL, &start, &length,
- &target_type, ¶ms);
-
- if (!target_type)
+ if (dm_get_next_target(dmt, NULL, &start, &length,
+ &target_type, ¶ms) != NULL)
+ /* multiple targets */
+ r = -1;
+ else if (!target_type)
r = -1;
else if (!strcmp(target_type, type))
r = 1;
@@ -1185,9 +1186,9 @@ do_foreach_partmaps (const char * mapname,
do {
if (
/*
- * if devmap target is "linear"
+ * if there is only a single "linear" target
*/
- (dm_type(names->name, TGT_PART) > 0) &&
+ (dm_type(names->name, TGT_PART) == 1) &&
/*
* and both uuid end with same suffix starting
--
2.12.2
More information about the dm-devel
mailing list