diff --git a/init/do_mounts_md.c b/init/do_mounts_md.c
index 1ec5c41c8a3c2799337826a602fc46384a02e1c6..c0dfd3c1e91b5e97e0fc298c07cd1fa7fd6127e4 100644
--- a/init/do_mounts_md.c
+++ b/init/do_mounts_md.c
@@ -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();
 }