Commit ad39c08
md: Don't register sync_thread for reshape directly
Currently, if reshape is interrupted, then reassemble the array will
register sync_thread directly from pers->run(), in this case
'MD_RECOVERY_RUNNING' is set directly, however, there is no guarantee
that md_do_sync() will be executed, hence stop_sync_thread() will hang
because 'MD_RECOVERY_RUNNING' can't be cleared.
Last patch make sure that md_do_sync() will set MD_RECOVERY_DONE,
however, following hang can still be triggered by dm-raid test
shell/lvconvert-raid-reshape.sh occasionally:
[root@fedora ~]# cat /proc/1982/stack
[<0>] stop_sync_thread+0x1ab/0x270 [md_mod]
[<0>] md_frozen_sync_thread+0x5c/0xa0 [md_mod]
[<0>] raid_presuspend+0x1e/0x70 [dm_raid]
[<0>] dm_table_presuspend_targets+0x40/0xb0 [dm_mod]
[<0>] __dm_destroy+0x2a5/0x310 [dm_mod]
[<0>] dm_destroy+0x16/0x30 [dm_mod]
[<0>] dev_remove+0x165/0x290 [dm_mod]
[<0>] ctl_ioctl+0x4bb/0x7b0 [dm_mod]
[<0>] dm_ctl_ioctl+0x11/0x20 [dm_mod]
[<0>] vfs_ioctl+0x21/0x60
[<0>] __x64_sys_ioctl+0xb9/0xe0
[<0>] do_syscall_64+0xc6/0x230
[<0>] entry_SYSCALL_64_after_hwframe+0x6c/0x74
Meanwhile mddev->recovery is:
MD_RECOVERY_RUNNING |
MD_RECOVERY_INTR |
MD_RECOVERY_RESHAPE |
MD_RECOVERY_FROZEN
Fix this problem by remove the code to register sync_thread directly
from raid10 and raid5. And let md_check_recovery() to register
sync_thread.
Fixes: f670557 ("[PATCH] md: Checkpoint and allow restart of raid5 reshape")
Fixes: f52f5c7 ("md: fix stopping sync thread")
Cc: stable@vger.kernel.org # v6.7+
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Song Liu <song@kernel.org>
Link: https://lore.kernel.org/r/20240201092559.910982-5-yukuai1@huaweicloud.com1 parent 82ec0ae commit ad39c08
3 files changed
Lines changed: 8 additions & 42 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
9376 | 9376 | | |
9377 | 9377 | | |
9378 | 9378 | | |
| 9379 | + | |
9379 | 9380 | | |
9380 | 9381 | | |
9381 | 9382 | | |
| |||
9408 | 9409 | | |
9409 | 9410 | | |
9410 | 9411 | | |
| 9412 | + | |
| 9413 | + | |
9411 | 9414 | | |
9412 | | - | |
| 9415 | + | |
9413 | 9416 | | |
9414 | 9417 | | |
9415 | 9418 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4175 | 4175 | | |
4176 | 4176 | | |
4177 | 4177 | | |
4178 | | - | |
4179 | | - | |
4180 | | - | |
4181 | | - | |
4182 | | - | |
| 4178 | + | |
4183 | 4179 | | |
4184 | 4180 | | |
4185 | 4181 | | |
| |||
4573 | 4569 | | |
4574 | 4570 | | |
4575 | 4571 | | |
4576 | | - | |
4577 | | - | |
4578 | | - | |
4579 | | - | |
4580 | | - | |
4581 | | - | |
4582 | | - | |
4583 | | - | |
| 4572 | + | |
4584 | 4573 | | |
4585 | | - | |
4586 | 4574 | | |
4587 | 4575 | | |
4588 | 4576 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7936 | 7936 | | |
7937 | 7937 | | |
7938 | 7938 | | |
7939 | | - | |
7940 | | - | |
7941 | | - | |
7942 | | - | |
7943 | | - | |
| 7939 | + | |
7944 | 7940 | | |
7945 | 7941 | | |
7946 | 7942 | | |
| |||
8506 | 8502 | | |
8507 | 8503 | | |
8508 | 8504 | | |
8509 | | - | |
8510 | | - | |
8511 | | - | |
8512 | | - | |
8513 | | - | |
8514 | | - | |
8515 | | - | |
8516 | | - | |
8517 | | - | |
8518 | | - | |
8519 | | - | |
8520 | | - | |
8521 | | - | |
8522 | | - | |
8523 | | - | |
8524 | | - | |
8525 | | - | |
8526 | | - | |
8527 | | - | |
8528 | | - | |
8529 | | - | |
| 8505 | + | |
8530 | 8506 | | |
8531 | | - | |
8532 | 8507 | | |
8533 | 8508 | | |
8534 | 8509 | | |
| |||
0 commit comments