• Takahiro Yasui's avatar
    dm raid1: fix deadlock when suspending failed device · f0703040
    Takahiro Yasui authored
    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: default avatarTakahiro Yasui <tyasui@redhat.com>
    Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
    Reviewed-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    f0703040
dm-raid1.c 33.9 KB