Skip to content

Commit 23e5b93

Browse files
committed
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
2 parents 5f27571 + 6c0f589 commit 23e5b93

File tree

2 files changed

+12
-9
lines changed

2 files changed

+12
-9
lines changed

drivers/md/Kconfig

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ if MD
1515
config BLK_DEV_MD
1616
tristate "RAID support"
1717
select BLOCK_HOLDER_DEPRECATED if SYSFS
18+
# BLOCK_LEGACY_AUTOLOAD requirement should be removed
19+
# after relevant mdadm enhancements - to make "names=yes"
20+
# the default - are widely available.
21+
select BLOCK_LEGACY_AUTOLOAD
1822
help
1923
This driver lets you combine several hard disk partitions into one
2024
logical block device. This can be used to simply append one

drivers/md/md.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3128,6 +3128,9 @@ slot_store(struct md_rdev *rdev, const char *buf, size_t len)
31283128
err = kstrtouint(buf, 10, (unsigned int *)&slot);
31293129
if (err < 0)
31303130
return err;
3131+
if (slot < 0)
3132+
/* overflow */
3133+
return -ENOSPC;
31313134
}
31323135
if (rdev->mddev->pers && slot == -1) {
31333136
/* Setting 'slot' on an active array requires also
@@ -6256,6 +6259,11 @@ static void __md_stop(struct mddev *mddev)
62566259
mddev->to_remove = &md_redundancy_group;
62576260
module_put(pers->owner);
62586261
clear_bit(MD_RECOVERY_FROZEN, &mddev->recovery);
6262+
6263+
percpu_ref_exit(&mddev->writes_pending);
6264+
percpu_ref_exit(&mddev->active_io);
6265+
bioset_exit(&mddev->bio_set);
6266+
bioset_exit(&mddev->sync_set);
62596267
}
62606268

62616269
void md_stop(struct mddev *mddev)
@@ -6265,10 +6273,6 @@ void md_stop(struct mddev *mddev)
62656273
*/
62666274
__md_stop_writes(mddev);
62676275
__md_stop(mddev);
6268-
percpu_ref_exit(&mddev->writes_pending);
6269-
percpu_ref_exit(&mddev->active_io);
6270-
bioset_exit(&mddev->bio_set);
6271-
bioset_exit(&mddev->sync_set);
62726276
}
62736277

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

7842-
percpu_ref_exit(&mddev->writes_pending);
7843-
percpu_ref_exit(&mddev->active_io);
7844-
bioset_exit(&mddev->bio_set);
7845-
bioset_exit(&mddev->sync_set);
7846-
78477846
mddev_free(mddev);
78487847
}
78497848

0 commit comments

Comments
 (0)