While looking at drbd 0.5.7 code, I've found this on the do_request
function:
if( drbd_conf[minor].conf.wire_protocol==DRBD_PROT_A || (!send_ok) ) {
/* If sending failed, we can not expect
an ack packet.
drbd_end_req(req, RQ_DRBD_SENT, 1);
}
drbd_end_req will acknowledge the upper layers that this request is
updated, while it has not reached the other node.
This breaks protocol B and C.
function:
if( drbd_conf[minor].conf.wire_protocol==DRBD_PROT_A || (!send_ok) ) {
/* If sending failed, we can not expect
an ack packet.
drbd_end_req(req, RQ_DRBD_SENT, 1);
}
drbd_end_req will acknowledge the upper layers that this request is
updated, while it has not reached the other node.
This breaks protocol B and C.