alistair23-linux/net
Xiaoliang (David) Wei 6150c22e2a [TCP] tcp_highspeed: Fix AI updates.
I think there is still a problem with the AIMD parameter update in
HighSpeed TCP code.

Line 125~138 of the code (net/ipv4/tcp_highspeed.c):

	/* Update AIMD parameters */
	if (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd) {
		while (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd &&
		       ca->ai < HSTCP_AIMD_MAX - 1)
			ca->ai++;
	} else if (tp->snd_cwnd < hstcp_aimd_vals[ca->ai].cwnd) {
		while (tp->snd_cwnd > hstcp_aimd_vals[ca->ai].cwnd &&
		       ca->ai > 0)
			ca->ai--;

In fact, the second part (decreasing ca->ai) never decreases since the
while loop's inequality is in the reverse direction. This leads to
unfairness with multiple flows (once a flow happens to enjoy a higher
ca->ai, it keeps enjoying that even its cwnd decreases)

Here is a tentative fix (I also added a comment, trying to keep the
change clear):

Acked-by: Stephen Hemminger <shemminger@osdl.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2006-07-12 13:58:50 -07:00
..
802 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
8021q [PATCH] lockdep: annotate vlan net device as being a special class 2006-07-03 15:27:10 -07:00
appletalk Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
atm [ATM] net/atm/clip.c: fix PROC_FS=n compile 2006-07-09 12:13:18 -07:00
ax25 [AX.25]: Fix locking of ax25 protocol function list. 2006-07-12 13:58:40 -07:00
bluetooth [Bluetooth] Add RFCOMM role switch support 2006-07-03 19:54:09 -07:00
bridge [NET] gso: Add skb_is_gso 2006-07-08 13:34:32 -07:00
core [NET] gso: Fix up GSO packets with broken checksums 2006-07-08 13:34:56 -07:00
dccp [DCCP]: Fix sparse warnings. 2006-07-10 14:50:37 -07:00
decnet [NET]: Fix IPv4/DECnet routing rule dumping 2006-07-08 13:38:55 -07:00
econet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ethernet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
ieee80211 [PATCH] softmac: fix build-break from 881ee6999d66c8fc903b429b73bbe6045b38c549 2006-07-05 13:42:58 -04:00
ipv4 [TCP] tcp_highspeed: Fix AI updates. 2006-07-12 13:58:50 -07:00
ipv6 [IPV6]: order addresses by scope 2006-07-12 13:58:37 -07:00
ipx Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
irda Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
key Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
lapb [NET]: Kill skb->list 2005-08-29 15:31:14 -07:00
llc Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
netfilter Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2006-06-30 15:40:17 -07:00
netlink [PATCH] bcm43xx: netlink deadlock fix 2006-07-03 15:26:58 -07:00
netrom [NETROM]: Drop lock before calling nr_destroy_socket 2006-07-12 13:58:45 -07:00
packet Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
rose [AX.25]: Use kzalloc 2006-07-09 12:14:22 -07:00
rxrpc Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sched [MAINTAINERS]: Add proper entry for TC classifier 2006-07-12 13:58:48 -07:00
sctp Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sunrpc This fixes a panic doing the first READDIR or READDIRPLUS call when: 2006-07-05 13:17:12 -04:00
tipc [TIPC] Fixed sk_buff panic caused by tipc_link_bundle_buf (REVISED) 2006-07-03 19:39:36 -07:00
unix [AF_UNIX]: datagram getpeersec fix 2006-07-03 19:26:15 -07:00
wanrouter Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
x25 Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
xfrm Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
compat.c [NETFILTER]: iptables 32bit compat layer 2006-04-01 02:25:19 -08:00
Kconfig [SECMARK]: Add secmark support to core networking. 2006-06-17 21:29:57 -07:00
Makefile [TIPC] Initial merge 2006-01-12 14:06:31 -08:00
nonet.c [PATCH] Make most file operations structs in fs/ const 2006-03-28 09:16:06 -08:00
socket.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
sysctl_net.c Remove obsolete #include <linux/config.h> 2006-06-30 19:25:36 +02:00
TUNABLE Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00