]> sourceware.org Git - lvm2.git/commitdiff
restrict last checkin to devs consisting entirely of error target
authorAlasdair Kergon <agk@redhat.com>
Mon, 25 Oct 2010 10:37:34 +0000 (10:37 +0000)
committerAlasdair Kergon <agk@redhat.com>
Mon, 25 Oct 2010 10:37:34 +0000 (10:37 +0000)
WHATS_NEW
lib/activate/dev_manager.c

index 00bc45a2aba0fe87d4e76ebcab5df3655b3f83de..a09acf1896ac64ff9df8ab21232904123675244a 100644 (file)
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,6 +1,6 @@
 Version 2.02.75 - 
 =====================================
-  Never scan a device which is using the error target.
+  Skip dm devices in scan if they contain only error targets.
   Fix strict-aliasing compile warning in partition table scanning.
   Add an option to automatically extend snapshots through dmeventd.
   Remove dependency on libm, floor() is replaced with integer algorithm.
index aab0c9acf9aee0e7aa76b8c75ea7a897a648f198..cbb53785ed630900843e7dedc6dbda9a686a793d 100644 (file)
@@ -135,10 +135,11 @@ int device_is_usable(struct device *dev)
        char *target_type = NULL;
        char *params, *vgname = NULL, *lvname, *layer;
        void *next = NULL;
+       int only_error_target = 1;
        int r = 0;
 
        if (!(dmt = dm_task_create(DM_DEVICE_STATUS))) {
-               log_error("Failed to allocate dm_task struct to check dev status");
+               log_error("Failed to create dm_task struct to check dev status");
                return 0;
        }
 
@@ -159,6 +160,11 @@ int device_is_usable(struct device *dev)
        name = dm_task_get_name(dmt);
        uuid = dm_task_get_uuid(dmt);
 
+       if (!info.target_count) {
+               log_debug("%s: Empty device %s not usable.", dev_name(dev), name);
+               goto out;
+       }
+
        if (info.suspended && ignore_suspended_devices()) {
                log_debug("%s: Suspended device %s not usable.", dev_name(dev), name);
                goto out;
@@ -191,13 +197,18 @@ int device_is_usable(struct device *dev)
                        goto out;
                }
 
-               if (target_type && !strcmp(target_type, "error")) {
-                       log_debug("%s: Error device %s not usable.",
-                                 dev_name(dev), name);
-                       goto out;
-               }
+               if (target_type && strcmp(target_type, "error"))
+                       only_error_target = 0;
        } while (next);
 
+       /* Skip devices consisting entirely of error targets. */
+       /* FIXME Deal with device stacked above error targets? */
+       if (only_error_target) {
+               log_debug("%s: Error device %s not usable.",
+                         dev_name(dev), name);
+               goto out;
+       }
+
        /* FIXME Also check dependencies? */
 
        /* Check internal lvm devices */
This page took 0.046503 seconds and 5 git commands to generate.