|
@@ -264,26 +264,32 @@ static int __init raid_setup(char *str)
|
|
|
__setup("raid=", raid_setup);
|
|
|
__setup("md=", md_setup);
|
|
|
|
|
|
+static void autodetect_raid(void)
|
|
|
+{
|
|
|
+ int fd;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * Since we don't want to detect and use half a raid array, we need to
|
|
|
+ * wait for the known devices to complete their probing
|
|
|
+ */
|
|
|
+ printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n");
|
|
|
+ printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n");
|
|
|
+ while (driver_probe_done() < 0)
|
|
|
+ msleep(100);
|
|
|
+ fd = sys_open("/dev/md0", 0, 0);
|
|
|
+ if (fd >= 0) {
|
|
|
+ sys_ioctl(fd, RAID_AUTORUN, raid_autopart);
|
|
|
+ sys_close(fd);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
void __init md_run_setup(void)
|
|
|
{
|
|
|
create_dev("/dev/md0", MKDEV(MD_MAJOR, 0));
|
|
|
|
|
|
if (raid_noautodetect)
|
|
|
printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)\n");
|
|
|
- else {
|
|
|
- /*
|
|
|
- * Since we don't want to detect and use half a raid array, we need to
|
|
|
- * wait for the known devices to complete their probing
|
|
|
- */
|
|
|
- printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n");
|
|
|
- printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n");
|
|
|
- while (driver_probe_done() < 0)
|
|
|
- msleep(100);
|
|
|
- int fd = sys_open("/dev/md0", 0, 0);
|
|
|
- if (fd >= 0) {
|
|
|
- sys_ioctl(fd, RAID_AUTORUN, raid_autopart);
|
|
|
- sys_close(fd);
|
|
|
- }
|
|
|
- }
|
|
|
+ else
|
|
|
+ autodetect_raid();
|
|
|
md_setup_drive();
|
|
|
}
|