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);