diff options
-rw-r--r-- | init/do_mounts_md.c | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c index 1ec5c41c8a3c..c0dfd3c1e91b 100644 --- a/init/do_mounts_md.c +++ b/init/do_mounts_md.c | |||
@@ -264,26 +264,32 @@ static int __init raid_setup(char *str) | |||
264 | __setup("raid=", raid_setup); | 264 | __setup("raid=", raid_setup); |
265 | __setup("md=", md_setup); | 265 | __setup("md=", md_setup); |
266 | 266 | ||
267 | static void autodetect_raid(void) | ||
268 | { | ||
269 | int fd; | ||
270 | |||
271 | /* | ||
272 | * Since we don't want to detect and use half a raid array, we need to | ||
273 | * wait for the known devices to complete their probing | ||
274 | */ | ||
275 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); | ||
276 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); | ||
277 | while (driver_probe_done() < 0) | ||
278 | msleep(100); | ||
279 | fd = sys_open("/dev/md0", 0, 0); | ||
280 | if (fd >= 0) { | ||
281 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); | ||
282 | sys_close(fd); | ||
283 | } | ||
284 | } | ||
285 | |||
267 | void __init md_run_setup(void) | 286 | void __init md_run_setup(void) |
268 | { | 287 | { |
269 | create_dev("/dev/md0", MKDEV(MD_MAJOR, 0)); | 288 | create_dev("/dev/md0", MKDEV(MD_MAJOR, 0)); |
270 | 289 | ||
271 | if (raid_noautodetect) | 290 | if (raid_noautodetect) |
272 | printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)\n"); | 291 | printk(KERN_INFO "md: Skipping autodetection of RAID arrays. (raid=noautodetect)\n"); |
273 | else { | 292 | else |
274 | /* | 293 | autodetect_raid(); |
275 | * Since we don't want to detect and use half a raid array, we need to | ||
276 | * wait for the known devices to complete their probing | ||
277 | */ | ||
278 | printk(KERN_INFO "md: Waiting for all devices to be available before autodetect\n"); | ||
279 | printk(KERN_INFO "md: If you don't use raid, use raid=noautodetect\n"); | ||
280 | while (driver_probe_done() < 0) | ||
281 | msleep(100); | ||
282 | int fd = sys_open("/dev/md0", 0, 0); | ||
283 | if (fd >= 0) { | ||
284 | sys_ioctl(fd, RAID_AUTORUN, raid_autopart); | ||
285 | sys_close(fd); | ||
286 | } | ||
287 | } | ||
288 | md_setup_drive(); | 294 | md_setup_drive(); |
289 | } | 295 | } |