summaryrefslogtreecommitdiffstats
path: root/net/tipc
diff options
context:
space:
mode:
authorJun'ichi Nomura <j-nomura@ce.jp.nec.com>2007-01-26 00:57:07 -0800
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-01-26 13:51:00 -0800
commitbfa152fa5e4d328fe3ebf15908ee8ec20a0ce6dc (patch)
tree1695481328f884639d6237eebfa48f4c29f9ce7c /net/tipc
parente540eb45a5254873245fd377f2fe3afc47bd33c1 (diff)
downloadblackbird-op-linux-bfa152fa5e4d328fe3ebf15908ee8ec20a0ce6dc.tar.gz
blackbird-op-linux-bfa152fa5e4d328fe3ebf15908ee8ec20a0ce6dc.zip
[PATCH] dm-multipath: fix stall on noflush suspend/resume
Allow noflush suspend/resume of device-mapper device only for the case where the device size is unchanged. Otherwise, dm-multipath devices can stall when resumed if noflush was used when suspending them, all paths have failed and queue_if_no_path is set. Explanation: 1. Something is doing fsync() on the block dev, holding inode->i_sem 2. The fsync write is blocked by all-paths-down and queue_if_no_path 3. Someone requests to suspend the dm device with noflush. Pending writes are left in queue. 4. In the middle of dm_resume(), __bind() tries to get inode->i_sem to do __set_size() and waits forever. 'noflush suspend' is a new device-mapper feature introduced in early 2.6.20. So I hope the fix being included before 2.6.20 is released. Example of reproducer: 1. Create a multipath device by dmsetup 2. Fail all paths during mkfs 3. Do dmsetup suspend --noflush and load new map with healthy paths 4. Do dmsetup resume Signed-off-by: Jun'ichi Nomura <j-nomura@ce.jp.nec.com> Acked-by: Alasdair G Kergon <agk@redhat.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'net/tipc')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud