linux/drivers/block/drbd
Philipp Reisner 975b297947 drbd: fix potential spinlock deadlock
drbd_try_clear_on_disk_bm() has a sanity check for the number of blocks
left to be resynced (rs_left) in the current resync extent.
If it detects a mismatch, it complains, and forces a disconnect using
drbd_force_state(mdev, NS(conn, C_DISCONNECTING));

Unfortunately, this may be called while holding the req_lock,
and drbd_force_state() want's to aquire that lock itself. Deadlock.

Don't force a disconnect, but fix up rs_left by recounting and
reassigning the number of dirty blocks in that extent.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
2012-11-08 16:58:09 +01:00
..
drbd_actlog.c drbd: fix potential spinlock deadlock 2012-11-08 16:58:09 +01:00
drbd_bitmap.c drbd: fix bitmap writeout after aborted resync 2012-11-08 16:58:04 +01:00
drbd_int.h drbd: Move list of epochs from mdev to tconn 2012-11-08 16:58:08 +01:00
drbd_interval.c drbd: Iterate over all overlapping intervals in a tree 2011-10-14 16:47:37 +02:00
drbd_interval.h drbd: Iterate over all overlapping intervals in a tree 2011-10-14 16:47:37 +02:00
drbd_main.c drbd: Move list of epochs from mdev to tconn 2012-11-08 16:58:08 +01:00
drbd_nl.c drbd: Move write_ordering from mdev to tconn 2012-11-08 16:58:07 +01:00
drbd_nla.c drbd: Split off netlink mandatory attribute handling into separate file 2012-11-08 16:57:45 +01:00
drbd_nla.h drbd: Split off netlink mandatory attribute handling into separate file 2012-11-08 16:57:45 +01:00
drbd_proc.c drbd: Move list of epochs from mdev to tconn 2012-11-08 16:58:08 +01:00
drbd_receiver.c drbd: Fix the WO=drain implementation for multiple volumes 2012-11-08 16:58:08 +01:00
drbd_req.c drbd: Move the CREATE_BARRIER flag from connection to device 2012-11-08 16:58:06 +01:00
drbd_req.h drbd: Get rid of MR_{READ,WRITE}_SHIFT 2012-11-08 16:58:00 +01:00
drbd_state.c drbd: Fixes from the drbd-8.3 branch 2012-11-08 16:58:06 +01:00
drbd_state.h drbd: Improved logging of state changes 2012-11-08 16:45:06 +01:00
drbd_strings.c drbd: Allow volumes to become primary only on one side 2012-11-04 00:16:31 +01:00
drbd_vli.h Fix common misspellings 2011-03-31 11:26:23 -03:00
drbd_worker.c drbd: Fixed an obvious copy-n-paste mistake 2012-11-08 16:58:06 +01:00
drbd_wrappers.h drbd: Split off netlink mandatory attribute handling into separate file 2012-11-08 16:57:45 +01:00
Kconfig drbd: Kconfig fix 2009-12-29 17:38:28 +01:00
Makefile drbd: Split off netlink mandatory attribute handling into separate file 2012-11-08 16:57:45 +01:00