diff -urN linux-2.4.4/include/linux/sysctl.h linux-2.4.4.new/include/linux/sysctl.h --- linux-2.4.4/include/linux/sysctl.h Fri Apr 27 15:48:20 2001 +++ linux-2.4.4.new/include/linux/sysctl.h Fri Jun 22 03:38:39 2001 @@ -281,6 +281,7 @@ NET_TCP_APP_WIN=86, NET_TCP_ADV_WIN_SCALE=87, NET_IPV4_NONLOCAL_BIND=88, + NET_TCP_DELACK_MAX=89, }; enum { diff -urN linux-2.4.4/include/net/tcp.h linux-2.4.4.new/include/net/tcp.h --- linux-2.4.4/include/net/tcp.h Fri Apr 27 15:50:22 2001 +++ linux-2.4.4.new/include/net/tcp.h Fri Jun 22 02:49:37 2001 @@ -460,6 +460,7 @@ extern int sysctl_tcp_rmem[3]; extern int sysctl_tcp_app_win; extern int sysctl_tcp_adv_win_scale; +extern int sysctl_tcp_delack_max; extern atomic_t tcp_memory_allocated; extern atomic_t tcp_sockets_allocated; diff -urN linux-2.4.4/net/ipv4/sysctl_net_ipv4.c linux-2.4.4.new/net/ipv4/sysctl_net_ipv4.c --- linux-2.4.4/net/ipv4/sysctl_net_ipv4.c Sun Mar 25 18:14:25 2001 +++ linux-2.4.4.new/net/ipv4/sysctl_net_ipv4.c Fri Jun 22 03:41:22 2001 @@ -227,6 +227,8 @@ &sysctl_tcp_app_win, sizeof(int), 0644, NULL, &proc_dointvec}, {NET_TCP_ADV_WIN_SCALE, "tcp_adv_win_scale", &sysctl_tcp_adv_win_scale, sizeof(int), 0644, NULL, &proc_dointvec}, + {NET_TCP_DELACK_MAX, "tcp_delack_max", + &sysctl_tcp_delack_max, sizeof(int), 0644, NULL, &proc_dointvec}, {0} }; diff -urN linux-2.4.4/net/ipv4/tcp_input.c linux-2.4.4.new/net/ipv4/tcp_input.c --- linux-2.4.4/net/ipv4/tcp_input.c Wed Apr 25 14:57:39 2001 +++ linux-2.4.4.new/net/ipv4/tcp_input.c Fri Jun 22 00:36:25 2001 @@ -77,6 +77,7 @@ int sysctl_tcp_window_scaling = 1; int sysctl_tcp_sack = 1; int sysctl_tcp_fack = 1; +int sysctl_tcp_delack_max = TCP_DELACK_MAX; int sysctl_tcp_reordering = TCP_FASTRETRANS_THRESH; #ifdef CONFIG_INET_ECN int sysctl_tcp_ecn = 1; @@ -3570,7 +3571,8 @@ tp->ack.ato = TCP_ATO_MIN; tcp_incr_quickack(tp); tcp_enter_quickack_mode(tp); - tcp_reset_xmit_timer(sk, TCP_TIME_DACK, TCP_DELACK_MAX); + tcp_reset_xmit_timer(sk, TCP_TIME_DACK, + sysctl_tcp_delack_max); discard: __kfree_skb(skb); diff -urN linux-2.4.4/net/ipv4/tcp_output.c linux-2.4.4.new/net/ipv4/tcp_output.c --- linux-2.4.4/net/ipv4/tcp_output.c Thu Apr 12 12:11:39 2001 +++ linux-2.4.4.new/net/ipv4/tcp_output.c Fri Jun 22 01:45:41 2001 @@ -1255,7 +1255,7 @@ int max_ato = HZ/2; if (tp->ack.pingpong || (tp->ack.pending&TCP_ACK_PUSHED)) - max_ato = TCP_DELACK_MAX; + max_ato = min(max_ato, sysctl_tcp_delack_max); /* Slow path, intersegment interval is "high". */ @@ -1311,7 +1311,8 @@ if (buff == NULL) { tcp_schedule_ack(tp); tp->ack.ato = TCP_ATO_MIN; - tcp_reset_xmit_timer(sk, TCP_TIME_DACK, TCP_DELACK_MAX); + tcp_reset_xmit_timer(sk, TCP_TIME_DACK, + sysctl_tcp_delack_max); return; } diff -urN linux-2.4.4/net/netsyms.c linux-2.4.4.new/net/netsyms.c --- linux-2.4.4/net/netsyms.c Fri Apr 27 14:15:01 2001 +++ linux-2.4.4.new/net/netsyms.c Fri Jun 22 13:35:04 2001 @@ -371,6 +371,7 @@ EXPORT_SYMBOL(sysctl_tcp_rmem); EXPORT_SYMBOL(sysctl_tcp_wmem); EXPORT_SYMBOL(sysctl_tcp_ecn); +EXPORT_SYMBOL(sysctl_tcp_delack_max); EXPORT_SYMBOL(tcp_cwnd_application_limited); EXPORT_SYMBOL(tcp_sendpage);