Commit 23e5b930 authored by Jens Axboe's avatar Jens Axboe
Browse files

Merge branch 'md-fixes' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md into block-6.3

Pull MD fixes from Song:

"This set contains two fixes for old issues (by Neil) and one fix
 for 6.3 (by Xiao)."

* 'md-fixes' of https://git.kernel.org/pub/scm/linux/kernel/git/song/md:
  md: select BLOCK_LEGACY_AUTOLOAD
  md: avoid signed overflow in slot_store()
  md: Free resources in __md_stop
parents 5f275713 6c0f5898
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -15,6 +15,10 @@ if MD
config BLK_DEV_MD
	tristate "RAID support"
	select BLOCK_HOLDER_DEPRECATED if SYSFS
	# BLOCK_LEGACY_AUTOLOAD requirement should be removed
	# after relevant mdadm enhancements - to make "names=yes"
	# the default - are widely available.
	select BLOCK_LEGACY_AUTOLOAD
	help
	  This driver lets you combine several hard disk partitions into one
	  logical block device. This can be used to simply append one
+8 −9
Original line number Diff line number Diff line
@@ -3128,6 +3128,9 @@ slot_store(struct md_rdev *rdev, const char *buf, size_t len)
		err = kstrtouint(buf, 10, (unsigned int *)&slot);
		if (err < 0)
			return err;
		if (slot < 0)
			/* overflow */
			return -ENOSPC;
	}
	if (rdev->mddev->pers && slot == -1) {
		/* Setting 'slot' on an active array requires also
@@ -6256,6 +6259,11 @@ static void __md_stop(struct mddev *mddev)
		mddev->to_remove = &md_redundancy_group;
	module_put(pers->owner);
	clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);

	percpu_ref_exit(&mddev->writes_pending);
	percpu_ref_exit(&mddev->active_io);
	bioset_exit(&mddev->bio_set);
	bioset_exit(&mddev->sync_set);
}

void md_stop(struct mddev *mddev)
@@ -6265,10 +6273,6 @@ void md_stop(struct mddev *mddev)
	 */
	__md_stop_writes(mddev);
	__md_stop(mddev);
	percpu_ref_exit(&mddev->writes_pending);
	percpu_ref_exit(&mddev->active_io);
	bioset_exit(&mddev->bio_set);
	bioset_exit(&mddev->sync_set);
}

EXPORT_SYMBOL_GPL(md_stop);
@@ -7839,11 +7843,6 @@ static void md_free_disk(struct gendisk *disk)
{
	struct mddev *mddev = disk->private_data;

	percpu_ref_exit(&mddev->writes_pending);
	percpu_ref_exit(&mddev->active_io);
	bioset_exit(&mddev->bio_set);
	bioset_exit(&mddev->sync_set);

	mddev_free(mddev);
}