OpenAFS Master Repository branch, master, updated. BP--openafs-stable-1_6_x-273-g4e71409f
Gerrit Code Review
Mon, 18 Oct 2010 10:18:41 -0700 (PDT)
The following commit has been merged in the master branch:
Author: Simon Wilkinson <firstname.lastname@example.org>
Date: Mon Oct 11 13:14:02 2010 -0400
Rx: Reject out of order ACK packets
Our RX implementation virtually guarantees that we will see out of
order ACK packets, even on well behaved networks, as we send acks
simultaneously from multiple threads.
Currently we only reject out-of-order ACKS which change the window
position (so a window that advances, can never go back). However,
we fail to deal with the explicit acknowledgement portion of the ACK
packet in the same way...
For example, if we have a packet A that acknowledges packets 1 and 2,
and then a packet B acknowledging 1,2,3 and 4. If B arrives before A,
then we mark 1, 2, 3, 4 as acknowledged, and then treat the arrival of
A as nAcking 3 and 4. This has the same effect as an explicitly stated
nack, triggers an early and unnecessary resend and may, in some situations,
cause the call to go into congestion avoidance.
We can solve this using the previousPacket field of the ACK. This
indicates the last packet seen by the peer. In the same way as
firstPacket, this should never go backwards, and so can be used to
detect out of order acknowledgements, and reject them.
Tested-by: Derrick Brashear <email@example.com>
Reviewed-by: Derrick Brashear <firstname.lastname@example.org>
src/rx/rx.c | 8 +++++++-
src/rx/rx.h | 1 +
2 files changed, 8 insertions(+), 1 deletions(-)
OpenAFS Master Repository