summaryrefslogtreecommitdiff
path: root/tools/testing/radix-tree/linux/kernel.h
diff options
context:
space:
mode:
authorYu Kuai <yukuai@fnnas.com>2025-11-17 16:55:57 +0800
committerYu Kuai <yukuai@fnnas.com>2025-11-30 09:38:45 +0800
commita913d1f6a7f607c110aeef8b58c8988f47a4b24e (patch)
treeb03cb61a7b1ce8e1eda1d1f098828ba903869f66 /tools/testing/radix-tree/linux/kernel.h
parent8c9e376b9d1a222fa02b93b615d2e25be0a91fed (diff)
md/raid5: fix IO hang when array is broken with IO inflight
Following test can cause IO hang: mdadm -CvR /dev/md0 -l10 -n4 /dev/sd[abcd] --assume-clean --chunk=64K --bitmap=none sleep 5 echo 1 > /sys/block/sda/device/delete echo 1 > /sys/block/sdb/device/delete echo 1 > /sys/block/sdc/device/delete echo 1 > /sys/block/sdd/device/delete dd if=/dev/md0 of=/dev/null bs=8k count=1 iflag=direct Root cause: 1) all disks removed, however all rdevs in the array is still in sync, IO will be issued normally. 2) IO failure from sda, and set badblocks failed, sda will be faulty and MD_SB_CHANGING_PENDING will be set. 3) error recovery try to recover this IO from other disks, IO will be issued to sdb, sdc, and sdd. 4) IO failure from sdb, and set badblocks failed again, now array is broken and will become read-only. 5) IO failure from sdc and sdd, however, stripe can't be handled anymore because MD_SB_CHANGING_PENDING is set: handle_stripe handle_stripe if (test_bit MD_SB_CHANGING_PENDING) set_bit STRIPE_HANDLE goto finish // skip handling failed stripe release_stripe if (test_bit STRIPE_HANDLE) list_add_tail conf->hand_list 6) later raid5d can't handle failed stripe as well: raid5d md_check_recovery md_update_sb if (!md_is_rdwr()) // can't clear pending bit return if (test_bit MD_SB_CHANGING_PENDING) break; // can't handle failed stripe Since MD_SB_CHANGING_PENDING can never be cleared for read-only array, fix this problem by skip this checking for read-only array. Link: https://lore.kernel.org/linux-raid/20251117085557.770572-3-yukuai@fnnas.com Fixes: d87f064f5874 ("md: never update metadata when array is read-only.") Signed-off-by: Yu Kuai <yukuai@fnnas.com> Reviewed-by: Li Nan <linan122@huawei.com>
Diffstat (limited to 'tools/testing/radix-tree/linux/kernel.h')
0 files changed, 0 insertions, 0 deletions