You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
drbd: No longer answer P_RS_DATA_REQUEST packets when in C_AHEAD mode
When the sync source node replies to a P_RS_DATA_REQUEST packet when it is already in ahead mode. I.e. those two packets crossed each other on the wire, that may lead to diverging bitmaps. This never happens in a well-tuned-system. In a well-tuned- system the resync controller has reduced the resync speed to zero long before we got into ahead-mode. But we have to be prepared for the not-well-tuned-system of course as well. Because -> diverging bitmaps = non terminating resync. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
This commit is contained in:
@@ -988,7 +988,9 @@ int w_e_end_rsdata_req(struct drbd_conf *mdev, struct drbd_work *w, int cancel)
|
||||
put_ldev(mdev);
|
||||
}
|
||||
|
||||
if (likely((e->flags & EE_WAS_ERROR) == 0)) {
|
||||
if (mdev->state.conn == C_AHEAD) {
|
||||
ok = drbd_send_ack(mdev, P_RS_CANCEL, e);
|
||||
} else if (likely((e->flags & EE_WAS_ERROR) == 0)) {
|
||||
if (likely(mdev->state.pdsk >= D_INCONSISTENT)) {
|
||||
inc_rs_pending(mdev);
|
||||
ok = drbd_send_block(mdev, P_RS_DATA_REPLY, e);
|
||||
|
||||
Reference in New Issue
Block a user