mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-11 17:10:13 +00:00
Merge tag 'md-6.19-20251130' of gitolite.kernel.org:pub/scm/linux/kernel/git/mdraid/linux into for-6.19/block
Pull MD changes from Yu: "- fix null-ptr-dereference regression for dm-raid0 (Yu Kuai) - fix IO hang for raid5 when array is broken with IO inflight (Yu Kuai) - remove legacy 1s delay to speed up system shutdown (Tarun Sahu)" * tag 'md-6.19-20251130' of gitolite.kernel.org:pub/scm/linux/kernel/git/mdraid/linux: md: remove legacy 1s delay in md_notify_reboot md/raid5: fix IO hang when array is broken with IO inflight md: warn about updating super block failure md/raid0: fix NULL pointer dereference in create_strip_zones() for dm-raid
This commit is contained in:
commit
c1536df942
@ -2788,6 +2788,7 @@ void md_update_sb(struct mddev *mddev, int force_change)
|
||||
if (!md_is_rdwr(mddev)) {
|
||||
if (force_change)
|
||||
set_bit(MD_SB_CHANGE_DEVS, &mddev->sb_flags);
|
||||
pr_err("%s: can't update sb for read-only array %s\n", __func__, mdname(mddev));
|
||||
return;
|
||||
}
|
||||
|
||||
@ -10407,7 +10408,6 @@ static int md_notify_reboot(struct notifier_block *this,
|
||||
unsigned long code, void *x)
|
||||
{
|
||||
struct mddev *mddev;
|
||||
int need_delay = 0;
|
||||
|
||||
spin_lock(&all_mddevs_lock);
|
||||
list_for_each_entry(mddev, &all_mddevs, all_mddevs) {
|
||||
@ -10421,21 +10421,11 @@ static int md_notify_reboot(struct notifier_block *this,
|
||||
mddev->safemode = 2;
|
||||
mddev_unlock(mddev);
|
||||
}
|
||||
need_delay = 1;
|
||||
spin_lock(&all_mddevs_lock);
|
||||
mddev_put_locked(mddev);
|
||||
}
|
||||
spin_unlock(&all_mddevs_lock);
|
||||
|
||||
/*
|
||||
* certain more exotic SCSI devices are known to be
|
||||
* volatile wrt too early system reboots. While the
|
||||
* right place to handle this issue is the given
|
||||
* driver, we do want to have a safe RAID driver ...
|
||||
*/
|
||||
if (need_delay)
|
||||
msleep(1000);
|
||||
|
||||
return NOTIFY_DONE;
|
||||
}
|
||||
|
||||
|
||||
@ -68,7 +68,10 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
|
||||
struct strip_zone *zone;
|
||||
int cnt;
|
||||
struct r0conf *conf = kzalloc(sizeof(*conf), GFP_KERNEL);
|
||||
unsigned int blksize = queue_logical_block_size(mddev->gendisk->queue);
|
||||
unsigned int blksize = 512;
|
||||
|
||||
if (!mddev_is_dm(mddev))
|
||||
blksize = queue_logical_block_size(mddev->gendisk->queue);
|
||||
|
||||
*private_conf = ERR_PTR(-ENOMEM);
|
||||
if (!conf)
|
||||
@ -84,6 +87,10 @@ static int create_strip_zones(struct mddev *mddev, struct r0conf **private_conf)
|
||||
sector_div(sectors, mddev->chunk_sectors);
|
||||
rdev1->sectors = sectors * mddev->chunk_sectors;
|
||||
|
||||
if (mddev_is_dm(mddev))
|
||||
blksize = max(blksize, queue_logical_block_size(
|
||||
rdev1->bdev->bd_disk->queue));
|
||||
|
||||
rdev_for_each(rdev2, mddev) {
|
||||
pr_debug("md/raid0:%s: comparing %pg(%llu)"
|
||||
" with %pg(%llu)\n",
|
||||
|
||||
@ -4956,7 +4956,8 @@ static void handle_stripe(struct stripe_head *sh)
|
||||
goto finish;
|
||||
|
||||
if (s.handle_bad_blocks ||
|
||||
test_bit(MD_SB_CHANGE_PENDING, &conf->mddev->sb_flags)) {
|
||||
(md_is_rdwr(conf->mddev) &&
|
||||
test_bit(MD_SB_CHANGE_PENDING, &conf->mddev->sb_flags))) {
|
||||
set_bit(STRIPE_HANDLE, &sh->state);
|
||||
goto finish;
|
||||
}
|
||||
@ -6768,7 +6769,8 @@ static void raid5d(struct md_thread *thread)
|
||||
int batch_size, released;
|
||||
unsigned int offset;
|
||||
|
||||
if (test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags))
|
||||
if (md_is_rdwr(mddev) &&
|
||||
test_bit(MD_SB_CHANGE_PENDING, &mddev->sb_flags))
|
||||
break;
|
||||
|
||||
released = release_stripe_list(conf, conf->temp_inactive_list);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user