drbd: differentiate early and later "postponing" of requests
authorLars Ellenberg <lars.ellenberg@linbit.com>
Mon, 3 Sep 2012 12:08:35 +0000 (14:08 +0200)
committerPhilipp Reisner <philipp.reisner@linbit.com>
Fri, 9 Nov 2012 13:11:37 +0000 (14:11 +0100)
commit70f17b6bd18dfe33f40db7573baa663b866be6ba
tree43e12531930774a6b1814a065441ca0ee1fce7df
parent76590cd1fc338fd1c50f7121636db421deb8b881
drbd: differentiate early and later "postponing" of requests

We use the RQ_POSTPONED flag to mark a request for several reasons.

It may be a conflicting request in a dual-primary setup,
where conflict detection and resolution on the peer decided that
this request needs to be re-submitted, it needs to re-enter
drbd_make_request() to fix the data divergence caused by these
conflicting, partially overlapping, quasi-simultaneous requests.

In this case we need to mark the corresponding area as out-of-sync,
before we call drbd_al_complete_io().

We also use the RQ_POSTPONED flag to just "push back" a request,
before even processing it, if IO is suspended for some reason.
In this case, as this request was neither submitted nor sent yet,
we must not touch the bitmap.

Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
drivers/block/drbd/drbd_req.c