linux/net
Gerrit Renker d50ad163e6 [CCID2]: Deadlock and spurious timeouts when Ack Ratio > cwnd
This patch removes a bug in the current code. I agree with Andrea's comment
that there is a problem here but the way it is treated does not fix it.

The problem is that whenever Ack Ratio > cwnd, starvation/deadlock occurs:
 * the receiver will not send an Ack until (Ack Ratio - cwnd) data packets
   have arrived;
 * the sender will not send any data packet before the receipt of an Ack
   advances the send window.
The only way that the connection then progresses was via RTO timeout. In one
extreme case (bulk transfer), it was observed that this happened for every single
packet; i.e. hundreds of packets, each a RTO timeout of 1..3 seconds apart:
a transfer which normally would take a fraction of a second thus grew to
several minutes.

The solution taken by this approach is to observe the relation

                   "Ack Ratio <= cwnd"

by using the constraint (1) from RFC 4341, 6.1.2; i.e. set

                 Ack Ratio = ceil(cwnd / 2)

and update it whenever either Ack Ratio or cwnd change. This ensures that
the deadlock problem can not arise.

Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk>
Acked-by: Ian McDonald <ian.mcdonald@jandi.co.nz>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2008-01-28 14:54:53 -08:00
..
9p 9p: add missing end-of-options record for trans_fd 2007-11-06 08:02:53 -06:00
802 [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
8021q [VLAN]: nested VLAN: fix lockdep's recursive locking warning 2008-01-10 22:38:31 -08:00
appletalk [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
atm [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
ax25 [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
bluetooth [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
bridge [NET]: Make rtnetlink infrastructure network namespace aware (v3) 2008-01-28 14:54:25 -08:00
can [CAN]: Add virtual CAN netdevice driver 2008-01-28 14:54:12 -08:00
core [NET] proto: Use pcounters for the inuse field 2008-01-28 14:54:40 -08:00
dccp [CCID2]: Deadlock and spurious timeouts when Ack Ratio > cwnd 2008-01-28 14:54:53 -08:00
decnet [NET]: Make rtnetlink infrastructure network namespace aware (v3) 2008-01-28 14:54:25 -08:00
econet [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
ethernet [NET]: Validate device addr prior to interface-up 2007-10-23 21:27:50 -07:00
ieee80211 [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
ipv4 [IPVS]: Relax the module get/put in ip_vs_app.c 2008-01-28 14:54:35 -08:00
ipv6 [IPV6]: Correct the comment concerning inetsw6 table 2008-01-28 14:54:49 -08:00
ipx [IPX]: Use existing sock refcnt debugging infrastructure 2007-11-10 21:39:26 -08:00
irda [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
iucv [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
key [AF_KEY]: Fix skb leak on pfkey_send_migrate() error 2008-01-20 20:31:45 -08:00
lapb [PATCH] remove many unneeded #includes of sched.h 2007-02-14 08:09:54 -08:00
llc [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
mac80211 mac80211: remove more forgotten code 2008-01-28 14:54:39 -08:00
netfilter [NETFILTER]: Introduce NF_INET_ hook values 2008-01-28 14:53:55 -08:00
netlabel [NETLABEL]: Spelling fixes 2007-12-20 14:03:11 -08:00
netlink [NET]: Consolidate net namespace related proc files creation. 2008-01-28 14:54:28 -08:00
netrom [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
packet [NET]: Consolidate net namespace related proc files creation. 2008-01-28 14:54:28 -08:00
rfkill rfkill: call rfkill_led_trigger_unregister() on error 2008-01-20 20:31:36 -08:00
rose [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
rxrpc [AF_RXRPC]: Add a missing goto 2007-12-07 04:31:47 -08:00
sched [NET]: Make rtnetlink infrastructure network namespace aware (v3) 2008-01-28 14:54:25 -08:00
sctp [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
sunrpc [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
tipc [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
unix [UNIX] Move the unix sock iterators in to proper place 2008-01-28 14:54:49 -08:00
wanrouter [NET]: Make /proc/net per network namespace 2007-10-10 16:49:06 -07:00
wireless [NET]: Consolidate net namespace related proc files creation. 2008-01-28 14:54:28 -08:00
x25 [NET]: Convert init_timer into setup_timer 2008-01-28 14:53:35 -08:00
xfrm [IPSEC]: Kill afinfo->nf_post_routing 2008-01-28 14:53:55 -08:00
compat.c [NETFILTER]: Introduce NF_INET_ hook values 2008-01-28 14:53:55 -08:00
Kconfig [CAN]: Add PF_CAN core module 2008-01-28 14:54:10 -08:00
Makefile [CAN]: Add PF_CAN core module 2008-01-28 14:54:10 -08:00
nonet.c
socket.c [NET]: Use sockfd_lookup_light in the rest of the net/socket.c 2008-01-28 14:54:00 -08:00
sysctl_net.c
TUNABLE