On Mon, Apr 22, 2024 at 12:07 AM Yu Kuai <yukuai1@xxxxxxxxxxxxxxx> wrote: > > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > Is is reported that for dm-raid10, lvextend + lvchange --syncaction will > trigger following softlockup: > > kernel:watchdog: BUG: soft lockup - CPU#3 stuck for 26s! [mdX_resync:6976] > CPU: 7 PID: 3588 Comm: mdX_resync Kdump: loaded Not tainted 6.9.0-rc4-next-20240419 #1 > RIP: 0010:_raw_spin_unlock_irq+0x13/0x30 > Call Trace: > <TASK> > md_bitmap_start_sync+0x6b/0xf0 > raid10_sync_request+0x25c/0x1b40 [raid10] > md_do_sync+0x64b/0x1020 > md_thread+0xa7/0x170 > kthread+0xcf/0x100 > ret_from_fork+0x30/0x50 > ret_from_fork_asm+0x1a/0x30 > > And the detailed process is as follows: > > md_do_sync > j = mddev->resync_min > while (j < max_sectors) > sectors = raid10_sync_request(mddev, j, &skipped) > if (!md_bitmap_start_sync(..., &sync_blocks)) > // md_bitmap_start_sync set sync_blocks to 0 > return sync_blocks + sectors_skippe; > // sectors = 0; > j += sectors; > // j never change > > Root cause is that commit 301867b1c168 ("md/raid10: check > slab-out-of-bounds in md_bitmap_get_counter") return early from > md_bitmap_get_counter(), without setting returned blocks. > > Fix this problem by always set returned blocks from > md_bitmap_get_counter"(), as it used to be. > > Noted that this patch just fix the softlockup problem in kernel, the > case that bitmap size doesn't match array size still need to be fixed. > > Fixes: 301867b1c168 ("md/raid10: check slab-out-of-bounds in md_bitmap_get_counter") > Reported-and-tested-by: Nigel Croxon <ncroxon@xxxxxxxxxx> > Closes: https://lore.kernel.org/all/71ba5272-ab07-43ba-8232-d2da642acb4e@xxxxxxxxxx/ > Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> Applied to md-6.10. Thanks! Song