]> git.karo-electronics.de Git - karo-tx-linux.git/commit
[PATCH] SCTP: Fix persistent slowdown in sctp when a gap ack consumes rx buffer.
authorNeil Horman <nhorman@tuxdriver.com>
Tue, 20 Jun 2006 07:09:03 +0000 (00:09 -0700)
committerChris Wright <chrisw@sous-sol.org>
Fri, 30 Jun 2006 00:17:15 +0000 (17:17 -0700)
commitc2ba44b229b04cbd57106107d0047e2c666040ce
tree215891a1b983d700026c7589e50802adb680ca31
parentf0a0819784268d7ca479b4538b07124249137500
[PATCH] SCTP: Fix persistent slowdown in sctp when a gap ack consumes rx buffer.

In the event that our entire receive buffer is full with a series of
chunks that represent a single gap-ack, and then we accept a chunk
(or chunks) that fill in the gap between the ctsn and the first gap,
we renege chunks from the end of the buffer, which effectively does
nothing but move our gap to the end of our received tsn stream. This
does little but move our missing tsns down stream a little, and, if the
sender is sending sufficiently large retransmit frames, the result is a
perpetual slowdown which can never be recovered from, since the only
chunk that can be accepted to allow progress in the tsn stream necessitates
that a new gap be created to make room for it. This leads to a constant
need for retransmits, and subsequent receiver stalls. The fix I've come up
with is to deliver the frame without reneging if we have a full receive
buffer and the receiving sockets sk_receive_queue is empty(indicating that
the receive buffer is being blocked by a missing tsn).

Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Sridhar Samudrala <sri@us.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Chris Wright <chrisw@sous-sol.org>
net/sctp/sm_statefuns.c