kernel-ark/drivers/block/drbd
Philipp Reisner e4f925e12e drbd: Do not upgrade state to Outdated if already Inconsistent [Bugz 277]
There was a race condition:
  In a situation with a SyncSource+Primary and a SyncTarget+Secondary node,
  and a resync dependency to some other device. After both nodes decided
  to do the resync, the other device finishes its resync process.
  At that time SyncSource already sent the P_SYNC_UUID packet, and
  already updated its peer disk state to Inconsistent.
  The SyncTarget node waits for the P_SYNC_UUID and sends a state packet
  to report the resync dependency change. That packet still carries
  a disk state of Outdated.

Impact:
  If application writes come in, during that time on the Primary node,
  those do not get replicated, and the out-of-sync counter gets increased.
  => The completion of resync is not detected on the primary node.
  => stalled.
  Those blocks get resync'ed with the next resync, since the are get
  marked as out-of-sync in the bitmap.

In order to fix this, we filter out that wrong state change in the
sanitize_state() function.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
2010-05-18 01:01:05 +02:00
..
drbd_actlog.c drbd: lc_element_by_index() never returns NULL 2010-04-02 08:40:33 +02:00
drbd_bitmap.c Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block 2010-04-09 11:50:29 -07:00
drbd_int.h blkdev: generalize flags for blkdev_issue_fn functions 2010-04-28 19:47:36 +02:00
drbd_main.c drbd: Do not upgrade state to Outdated if already Inconsistent [Bugz 277] 2010-05-18 01:01:05 +02:00
drbd_nl.c drbd: Renamed overwrite_peer to primary_force 2010-03-11 16:32:14 +01:00
drbd_proc.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
drbd_receiver.c Merge branch 'master' into for-2.6.35 2010-04-29 09:36:24 +02:00
drbd_req.c drbd_req.c: use part_[inc|dec]_in_flight() 2009-12-03 17:40:51 +01:00
drbd_req.h tree-wide: Assorted spelling fixes 2010-02-09 11:13:56 +01:00
drbd_strings.c The DRBD driver 2009-10-01 21:17:49 +02:00
drbd_vli.h The DRBD driver 2009-10-01 21:17:49 +02:00
drbd_worker.c drbd: Make sure we do not send state updates during an empty resync [Bugz 271] 2010-03-11 16:10:40 +01:00
drbd_wrappers.h The DRBD driver 2009-10-01 21:17:49 +02:00
Kconfig drbd: Kconfig fix 2009-12-29 17:38:28 +01:00
Makefile drbd: remove tracing bits 2009-10-01 21:17:58 +02:00