From: NeilBrown Current code calls do_md_stop to clean up if do_md_run fails, but this is a/ not needed as do_md_run cleans up itself b/ bad as it could try to clean up after an -EBUSY error !!! --- 25-akpm/drivers/md/md.c | 15 +-------------- 1 files changed, 1 insertion(+), 14 deletions(-) diff -puN drivers/md/md.c~md-06-do_md_run-fix drivers/md/md.c --- 25/drivers/md/md.c~md-06-do_md_run-fix Thu Jan 15 17:36:19 2004 +++ 25-akpm/drivers/md/md.c Thu Jan 15 17:36:19 2004 @@ -1766,10 +1766,8 @@ static void autorun_array(mddev_t *mddev printk("\n"); err = do_md_run (mddev); - if (err) { + if (err) printk(KERN_WARNING "md :do_md_run() returned %d\n", err); - do_md_stop (mddev, 0); - } } /* @@ -2571,19 +2569,8 @@ static int md_ioctl(struct inode *inode, goto done_unlock; case RUN_ARRAY: - { err = do_md_run (mddev); - /* - * we have to clean up the mess if - * the array cannot be run for some - * reason ... - * ->pers will not be set, to superblock will - * not be updated. - */ - if (err) - do_md_stop (mddev, 0); goto done_unlock; - } default: if (_IOC_TYPE(cmd) == MD_MAJOR) _