Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 934d9c23 authored by NeilBrown's avatar NeilBrown
Browse files

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: default avatarNeilBrown <neilb@suse.de>
parent f8d56f17
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -3884,6 +3884,7 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
	if (mode == 0) {
		mdk_rdev_t *rdev;
		struct list_head *tmp;
		struct block_device *bdev;

		printk(KERN_INFO "md: %s stopped.\n", mdname(mddev));

@@ -3940,6 +3941,12 @@ static int do_md_stop(mddev_t * mddev, int mode, int is_open)
		mddev->degraded = 0;
		mddev->barriers_work = 0;
		mddev->safemode = 0;
		bdev = bdget_disk(mddev->gendisk, 0);
		if (bdev) {
			blkdev_ioctl(bdev, 0, BLKRRPART, 0);
			bdput(bdev);
		}
		kobject_uevent(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE);

	} else if (mddev->pers)
		printk(KERN_INFO "md: %s switched to read-only mode.\n",