diff options
author | Takahiro Yasui <tyasui@redhat.com> | 2010-03-06 03:32:35 +0100 |
---|---|---|
committer | Alasdair G Kergon <agk@redhat.com> | 2010-03-06 03:32:35 +0100 |
commit | f070304094edb8d516423e79edd27c97ec2020b0 (patch) | |
tree | 0330115839e84c4b5db8e2318a932f2dee78eba4 /scripts/dtc | |
parent | dm: eliminate some holes data structures (diff) | |
download | linux-f070304094edb8d516423e79edd27c97ec2020b0.tar.xz linux-f070304094edb8d516423e79edd27c97ec2020b0.zip |
dm raid1: fix deadlock when suspending failed device
To prevent deadlock, bios in the hold list should be flushed before
dm_rh_stop_recovery() is called in mirror_suspend().
The recovery can't start because there are pending bios and therefore
dm_rh_stop_recovery deadlocks.
When there are pending bios in the hold list, the recovery waits for
the completion of the bios after recovery_count is acquired.
The recovery_count is released when the recovery finished, however,
the bios in the hold list are processed after dm_rh_stop_recovery() in
mirror_presuspend(). dm_rh_stop_recovery() also acquires recovery_count,
then deadlock occurs.
Signed-off-by: Takahiro Yasui <tyasui@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>
Reviewed-by: Mikulas Patocka <mpatocka@redhat.com>
Diffstat (limited to 'scripts/dtc')
0 files changed, 0 insertions, 0 deletions