linux/drivers/block/drbd
Lars Ellenberg 26a96110ab drbd: introduce unfence-peer handler
When resync is finished, we already call the "after-resync-target"
handler (on the former sync target, obviously), once per volume.

Paired with the before-resync-target handler, you can create snapshots,
before the resync causes the volumes to become inconsistent,
and discard those snapshots again, once they are no longer needed.

It was also overloaded to be paired with the "fence-peer" handler,
to "unfence" once the volumes are up-to-date and known good.

This has some disadvantages, though: we call "fence-peer" for the whole
connection (once for the group of volumes), but would call unfence as
side-effect of after-resync-target once for each volume.

Also, we fence on a (current, or about to become) Primary,
which will later become the sync-source.

Calling unfence only as a side effect of the after-resync-target
handler opens a race window, between a new fence on the Primary
(SyncTarget) and the unfence on the SyncTarget, which is difficult to
close without some kind of "cluster wide lock" in those handlers.

We would not need those handlers if we could still communicate.
Which makes trying to aquire a cluster wide lock from those handlers
seem like a very bad idea.

This introduces the "unfence-peer" handler, which will be called
per connection (once for the group of volumes), just like the fence
handler, only once all volumes are back in sync, and on the SyncSource.

Which is expected to be the node that previously called "fence", the
node that is currently allowed to be Primary, and thus the only node
that could trigger a new "fence" that could race with this unfence.

Which makes us not need any cluster wide synchronization here,
serializing two scripts running on the same node is trivial.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
2016-06-13 21:43:06 -06:00
..
drbd_actlog.c drbd: finish resync on sync source only by notification from sync target 2016-06-13 21:43:05 -06:00
drbd_bitmap.c drbd: use bio op accessors 2016-06-07 13:41:38 -06:00
drbd_debugfs.c wrappers for ->i_mutex access 2016-01-22 18:04:28 -05:00
drbd_debugfs.h drbd: debugfs: add basic hierarchy 2014-07-10 18:35:16 +02:00
drbd_int.h drbd: introduce unfence-peer handler 2016-06-13 21:43:06 -06:00
drbd_interval.c drbd: use RB_DECLARE_CALLBACKS() to define augment callbacks 2014-09-18 09:00:17 -06:00
drbd_interval.h drbd: application writes may set-in-sync in protocol != C 2014-07-10 18:35:02 +02:00
drbd_main.c drbd: adjust assert in w_bitmap_io to account for BM_LOCKED_CHANGE_ALLOWED 2016-06-13 21:43:04 -06:00
drbd_nl.c drbd: introduce unfence-peer handler 2016-06-13 21:43:06 -06:00
drbd_nla.c drbd: Remove drbd_wrappers.h 2014-04-30 13:46:54 -06: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 enum write_ordering_e to drbd.h 2015-11-25 09:22:00 -07:00
drbd_protocol.h drbd: Create the protocol feature THIN_RESYNC 2016-06-13 21:43:04 -06:00
drbd_receiver.c drbd: when receiving P_TRIM, zero-out partial unaligned chunks 2016-06-13 21:43:05 -06:00
drbd_req.c drbd: zero-out partial unaligned discards on local backend 2016-06-13 21:43:05 -06:00
drbd_req.h drbd: De-inline drbd_should_do_remote() and drbd_should_send_out_of_sync() 2015-11-25 09:22:00 -07:00
drbd_state_change.h drbd: Backport the "events2" command 2015-11-25 09:22:00 -07:00
drbd_state.c drbd: change bitmap write-out when leaving resync states 2016-06-13 21:43:03 -06:00
drbd_state.h drbd: Fix locking across all resources 2015-11-25 09:22:00 -07:00
drbd_strings.c drbd: Move string function prototypes from linux/drbd.h to drbd_string.h 2014-02-17 16:50:37 +01:00
drbd_strings.h drbd: Move string function prototypes from linux/drbd.h to drbd_string.h 2014-02-17 16:50:37 +01:00
drbd_vli.h Fix common misspellings 2011-03-31 11:26:23 -03:00
drbd_worker.c drbd: introduce unfence-peer handler 2016-06-13 21:43:06 -06:00
Kconfig drbd: update Kconfig to match current dependencies 2012-12-06 13:08:29 +01:00
Makefile drbd: debugfs: add basic hierarchy 2014-07-10 18:35:16 +02:00