aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/md.c
diff options
context:
space:
mode:
authorNeilBrown <neilb@suse.de>2008-10-28 02:01:23 -0400
committerNeilBrown <neilb@suse.de>2008-10-28 02:01:23 -0400
commit934d9c23b4c7e31840a895ba4b7e88d6413c81f3 (patch)
tree989d1ac0be656e51d44eaf8513076917bfed3adf /drivers/md/md.c
parentf8d56f1771e4867acc461146764b4feeb5245669 (diff)
md: destroy partitions and notify udev when md array is stopped.
md arrays are not currently destroyed when they are stopped - they remain in /sys/block. Last time I tried this I tripped over locking too much. A consequence of this is that udev doesn't remove anything from /dev. This is rather ugly. As an interim measure until proper device removal can be achieved, make sure all partitions are removed using the BLKRRPART ioctl, and send a KOBJ_CHANGE when an md array is stopped. Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r--drivers/md/md.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c
index b4162f6f1b79..9abf6ed16535 100644
--- a/drivers/md/md.c
+++ b/drivers/md/md.c
@@ -3884,6 +3884,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
3884 if (mode == 0) { 3884 if (mode == 0) {
3885 mdk_rdev_t *rdev; 3885 mdk_rdev_t *rdev;
3886 struct list_head *tmp; 3886 struct list_head *tmp;
3887 struct block_device *bdev;
3887 3888
3888 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); 3889 printk(KERN_INFO "md: %s stopped.\n", mdname(mddev));
3889 3890
@@ -3940,6 +3941,12 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
3940 mddev->degraded = 0; 3941 mddev->degraded = 0;
3941 mddev->barriers_work = 0; 3942 mddev->barriers_work = 0;
3942 mddev->safemode = 0; 3943 mddev->safemode = 0;
3944 bdev = bdget_disk(mddev->gendisk, 0);
3945 if (bdev) {
3946 blkdev_ioctl(bdev, 0, BLKRRPART, 0);
3947 bdput(bdev);
3948 }
3949 kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);
3943 3950
3944 } else if (mddev->pers) 3951 } else if (mddev->pers)
3945 printk(KERN_INFO "md: %s switched to read-only mode.\n", 3952 printk(KERN_INFO "md: %s switched to read-only mode.\n",