Эх сурвалжийг харах

[PATCH] Driver core: Fix up the driver and device iterators to be quieter

Also stops looping over the lists when a match is found.

Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de
gregkh@suse.de 20 жил өмнө
parent
commit
b86c1df1f9
1 өөрчлөгдсөн 19 нэмэгдсэн , 13 устгасан
  1. 19 13
      drivers/base/dd.c

+ 19 - 13
drivers/base/dd.c

@@ -88,20 +88,23 @@ static int __device_attach(struct device_driver * drv, void * data)
 	int error;
 	int error;
 
 
 	error = driver_probe_device(drv, dev);
 	error = driver_probe_device(drv, dev);
-
-	if (error == -ENODEV && error == -ENXIO) {
-		/* Driver matched, but didn't support device
-		 * or device not found.
-		 * Not an error; keep going.
-		 */
-		error = 0;
-	} else {
-		/* driver matched but the probe failed */
-		printk(KERN_WARNING
-		       "%s: probe of %s failed with error %d\n",
-		       drv->name, dev->bus_id, error);
+	if (error) {
+		if ((error == -ENODEV) || (error == -ENXIO)) {
+			/* Driver matched, but didn't support device
+			 * or device not found.
+			 * Not an error; keep going.
+			 */
+			error = 0;
+		} else {
+			/* driver matched but the probe failed */
+			printk(KERN_WARNING
+			       "%s: probe of %s failed with error %d\n",
+			       drv->name, dev->bus_id, error);
+		}
+		return error;
 	}
 	}
-	return 0;
+	/* stop looking, this device is attached */
+	return 1;
 }
 }
 
 
 /**
 /**
@@ -137,7 +140,10 @@ static int __driver_attach(struct device * dev, void * data)
 				       drv->name, dev->bus_id, error);
 				       drv->name, dev->bus_id, error);
 			} else
 			} else
 				error = 0;
 				error = 0;
+			return error;
 		}
 		}
+		/* stop looking, this driver is attached */
+		return 1;
 	}
 	}
 	return 0;
 	return 0;
 }
 }