aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/md')
-rw-r--r--drivers/md/md.c25
1 files changed, 9 insertions, 16 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index 03dcbfbe250f..d44efb267a69 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -4767,7 +4767,6 @@ out:
4767 */ 4767 */
4768static int do_md_stop(mddev_t * mddev, int mode, int is_open) 4768static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4769{ 4769{
4770 int err = 0, revalidate = 0;
4771 struct gendisk *disk = mddev->gendisk; 4770 struct gendisk *disk = mddev->gendisk;
4772 mdk_rdev_t *rdev; 4771 mdk_rdev_t *rdev;
4773 4772
@@ -4775,9 +4774,11 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4775 if (atomic_read(&mddev->openers) > is_open || 4774 if (atomic_read(&mddev->openers) > is_open ||
4776 mddev->sysfs_active) { 4775 mddev->sysfs_active) {
4777 printk("md: %s still in use.\n",mdname(mddev)); 4776 printk("md: %s still in use.\n",mdname(mddev));
4778 err = -EBUSY; 4777 mutex_unlock(&mddev->open_mutex);
4779 } else if (mddev->pers) { 4778 return -EBUSY;
4779 }
4780 4780
4781 if (mddev->pers) {
4781 if (mddev->ro) 4782 if (mddev->ro)
4782 set_disk_ro(disk, 0); 4783 set_disk_ro(disk, 0);
4783 4784
@@ -4798,23 +4799,17 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4798 } 4799 }
4799 4800
4800 set_capacity(disk, 0); 4801 set_capacity(disk, 0);
4801 revalidate = 1; 4802 mutex_unlock(&mddev->open_mutex);
4803 revalidate_disk(disk);
4802 4804
4803 if (mddev->ro) 4805 if (mddev->ro)
4804 mddev->ro = 0; 4806 mddev->ro = 0;
4805 4807 } else
4806 err = 0; 4808 mutex_unlock(&mddev->open_mutex);
4807 }
4808 mutex_unlock(&mddev->open_mutex);
4809 if (revalidate)
4810 revalidate_disk(disk);
4811 if (err)
4812 return err;
4813 /* 4809 /*
4814 * Free resources if final stop 4810 * Free resources if final stop
4815 */ 4811 */
4816 if (mode == 0) { 4812 if (mode == 0) {
4817
4818 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); 4813 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev));
4819 4814
4820 bitmap_destroy(mddev); 4815 bitmap_destroy(mddev);
@@ -4831,13 +4826,11 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
4831 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE); 4826 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
4832 if (mddev->hold_active == UNTIL_STOP) 4827 if (mddev->hold_active == UNTIL_STOP)
4833 mddev->hold_active = 0; 4828 mddev->hold_active = 0;
4834
4835 } 4829 }
4836 err = 0;
4837 blk_integrity_unregister(disk); 4830 blk_integrity_unregister(disk);
4838 md_new_event(mddev); 4831 md_new_event(mddev);
4839 sysfs_notify_dirent_safe(mddev->sysfs_state); 4832 sysfs_notify_dirent_safe(mddev->sysfs_state);
4840 return err; 4833 return 0;
4841} 4834}
4842 4835
4843#ifndef MODULE 4836#ifndef MODULE