• Lars Ellenberg's avatar
    drbd: fix regression: protocol A sometimes synchronous, C sometimes double-latency · 1b228c98
    Lars Ellenberg authored
    Regression introduced with 8.4.5
     drbd: application writes may set-in-sync in protocol != C
    
    Overwriting the same block (LBA) while a former version is still
    "in-flight" to the peer (to be exact: we did not receive the
    P_BARRIER_ACK for its epoch yet) would wait for the full epoch of that
    former version to be acknowledged by the peer.
    
    In synchronous and quasi-synchronous protocols C and B,
    this may double the latency on overwrites.
    
    With protocol A, which is supposed to be asynchronous and only wait for
    local completion, it is even worse: it would make overwrites
    quasi-synchronous, they would be hit by the full RTT, which protocol A
    was specifically meant to avoid, and possibly the additional time it
    takes to drain the buffers first.
    
    Particularly bad for databases, or anything else that
    does frequent updates to the same blocks (various file system meta data).
    
    No impact if >= rtt passes between updates to the same block.
    Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
    Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
    Signed-off-by: default avatarJens Axboe <axboe@fb.com>
    1b228c98
drbd_req.c 53.6 KB