Skip to content

RFC dm-raid1: fix deadlock at suspend after suspend was interrupted

Takahiro Yasui dm-devel 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 RFC Latest3 patches 4 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/3dm: introduce a presuspend cancel frameworkdrivers/md/dm-table.c drivers/md/dm.c drivers/md/dm.h +1 more+40 -70 replies
2/3dm-raid1: add cancel_presuspend functiondrivers/md/dm-raid1.c+9 -00 replies
3/3dm-delay: add cancel_presuspend functiondrivers/md/dm-delay.c+1 -00 replies

Reviews trailers per patch

No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.

Read the v1 thread

Cover letter [RFC][PATCH 0/3] dm-raid1: fix deadlock at suspend after suspend was interrupted

Hi,

This is a patch set to fix deadlock on suspending of mirror device.

ISSUE
=====

Suspend procedure on a dm-mirror device could cause deadlock on recovery_count semaphore.

When mirror_presuspend is called, recovery_count semaphore is acquired in dm_rh_stop_recovery() to stop recovery routine, but when an signal is caught in dm_wait_for_completion() or an error occurred in in dm_suspend(), the suspend process is interrupted without releasing recovery_count semaphore of a mirror device. This means that another suspend is executed, and then the suspend process gets stuck at dm_rh_stop_recovery().

When suspend procedure is interrupted, the device should work properly since the status of the device is not "suspended."

SOLUTION
========

Introduce a target handler, cancel_presuspend, to cancel status changes done by a target specific presuspend handler.

PATCH SET
=========
1/3: dm: introduce cancel_presuspend framework 2/3: dm-raid1: add cancel_presuspend function 3/3: dm-delay: add cancel_presuspend function

I appreciate your comments.

Thanks,

Signature · 2 lines
Takahiro Yasui
Hitachi Computer Products (America), Inc.