diff options
author | NeilBrown <neilb@suse.de> | 2013-11-14 15:16:17 +1100 |
---|---|---|
committer | NeilBrown <neilb@suse.de> | 2013-11-19 15:19:17 +1100 |
commit | 30b8feb730f9b9b3c5de02580897da03f59b6b16 (patch) | |
tree | 7e902a3be606c7f46b16c62b0621dc58580fbbd9 /drivers/xen/privcmd.h | |
parent | c91abf5a3546a4ff0838d2905f4d7eae2795f724 (diff) |
md/raid5: avoid deadlock when raid5 array has unack badblocks during md_stop_writes.
When raid5 recovery hits a fresh badblock, this badblock will flagged as unack
badblock until md_update_sb() is called.
But md_stop will take reconfig lock which means raid5d can't call
md_update_sb() in md_check_recovery(), the badblock will always
be unack, so raid5d thread enters an infinite loop and md_stop_write()
can never stop sync_thread. This causes deadlock.
To solve this, when STOP_ARRAY ioctl is issued and sync_thread is
running, we need set md->recovery FROZEN and INTR flags and wait for
sync_thread to stop before we (re)take reconfig lock.
This requires that raid5 reshape_request notices MD_RECOVERY_INTR
(which it probably should have noticed anyway) and stops waiting for a
metadata update in that case.
Reported-by: Jianpeng Ma <majianpeng@gmail.com>
Reported-by: Bian Yu <bianyu@kedacom.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Diffstat (limited to 'drivers/xen/privcmd.h')
0 files changed, 0 insertions, 0 deletions