[lvm-devel] master - dev_manager: check prohibited devices earlier

Zdenek Kabelac zkabelac at fedoraproject.org
Wed Mar 12 18:47:32 UTC 2014


Gitweb:        http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=c0f1eb5f0f8f0a790d1d9e6d9d3e1323c85e4144
Commit:        c0f1eb5f0f8f0a790d1d9e6d9d3e1323c85e4144
Parent:        b50b4471bd863304a78b194d1ef10b85cc9666f7
Author:        Zdenek Kabelac <zkabelac at redhat.com>
AuthorDate:    Wed Mar 12 19:38:34 2014 +0100
Committer:     Zdenek Kabelac <zkabelac at redhat.com>
CommitterDate: Wed Mar 12 19:38:34 2014 +0100

dev_manager: check prohibited devices earlier

Reorder detection for internal device - since this test
is much simpler then target analysis, check it sooner.

Replace test for '68' with sizeof & ID_LEN

Add FIXME about device alias problem with is_reserved_lvname,
since this test fails on devices like /dev/dm-X
so we need to convert tests to UUID.
---
 lib/activate/dev_manager.c |   41 +++++++++++++++++++++--------------------
 1 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/lib/activate/dev_manager.c b/lib/activate/dev_manager.c
index c723a61..490218c 100644
--- a/lib/activate/dev_manager.c
+++ b/lib/activate/dev_manager.c
@@ -392,6 +392,27 @@ static int _device_is_usable(struct device *dev, int check_lv_names)
 		goto out;
 	}
 
+	/* Check internal lvm devices */
+	if (check_lv_names &&
+	    uuid && !strncmp(uuid, UUID_PREFIX, sizeof(UUID_PREFIX) - 1)) {
+		if (strlen(uuid) > (sizeof(UUID_PREFIX) + 2 * ID_LEN)) { /* 68 */
+			log_debug_activation("%s: Reserved uuid %s on internal LV device %s not usable.",
+					     dev_name(dev), uuid, name);
+			goto out;
+		}
+
+		if (!(vgname = dm_strdup(name)) ||
+		    !dm_split_lvm_name(NULL, NULL, &vgname, &lvname, &layer))
+			goto_out;
+
+		/* FIXME: fails to handle dev aliases i.e. /dev/dm-5, replace with UUID suffix */
+		if (lvname && (is_reserved_lvname(lvname) || *layer)) {
+			log_debug_activation("%s: Reserved internal LV device %s/%s%s%s not usable.",
+					     dev_name(dev), vgname, lvname, *layer ? "-" : "", layer);
+			goto out;
+		}
+	}
+
 	/* FIXME Also check for mpath no paths */
 	do {
 		next = dm_get_next_target(dmt, next, &start, &length,
@@ -439,26 +460,6 @@ static int _device_is_usable(struct device *dev, int check_lv_names)
 
 	/* FIXME Also check dependencies? */
 
-	/* Check internal lvm devices */
-	if (check_lv_names &&
-	    uuid && !strncmp(uuid, UUID_PREFIX, sizeof(UUID_PREFIX) - 1)) {
-		if (!(vgname = dm_strdup(name)) ||
-		    !dm_split_lvm_name(NULL, NULL, &vgname, &lvname, &layer))
-			goto_out;
-
-		if (strlen(uuid) > 68) {
-			log_debug_activation("%s: Reserved uuid %s on internal LV device %s/%s%s%s not usable.",
-					     dev_name(dev), uuid, vgname, lvname, *layer ? "-" : "", layer);
-			goto out;
-		}
-
-		if (lvname && (is_reserved_lvname(lvname) || *layer)) {
-			log_debug_activation("%s: Reserved internal LV device %s/%s%s%s not usable.",
-					     dev_name(dev), vgname, lvname, *layer ? "-" : "", layer);
-			goto out;
-		}
-	}
-
 	r = 1;
 
       out:




More information about the lvm-devel mailing list