diff -urN 2.2.10/include/linux/sysctl.h 2.2.10-MPI/include/linux/sysctl.h --- 2.2.10/include/linux/sysctl.h Tue Jul 13 00:33:04 1999 +++ 2.2.10-MPI/include/linux/sysctl.h Thu Jul 22 12:15:11 1999 @@ -223,7 +223,8 @@ NET_IPV4_ICMP_PARAMPROB_RATE=62, NET_IPV4_ICMP_ECHOREPLY_RATE=63, NET_IPV4_ICMP_IGNORE_BOGUS_ERROR_RESPONSES=64, - NET_IPV4_IGMP_MAX_MEMBERSHIPS=65 + NET_IPV4_IGMP_MAX_MEMBERSHIPS=65, + NET_IPV4_TCP_DISABLE_DELACKS=66, }; enum { diff -urN 2.2.10/net/ipv4/sysctl_net_ipv4.c 2.2.10-MPI/net/ipv4/sysctl_net_ipv4.c --- 2.2.10/net/ipv4/sysctl_net_ipv4.c Mon Jan 18 02:27:54 1999 +++ 2.2.10-MPI/net/ipv4/sysctl_net_ipv4.c Thu Jul 22 12:15:11 1999 @@ -60,6 +60,7 @@ extern int sysctl_tcp_rfc1337; extern int sysctl_tcp_syn_taildrop; extern int sysctl_max_syn_backlog; +extern int sysctl_tcp_disable_delacks; /* From icmp.c */ extern int sysctl_icmp_destunreach_time; @@ -184,6 +185,8 @@ {NET_IPV4_IGMP_MAX_MEMBERSHIPS, "igmp_max_memberships", &sysctl_igmp_max_memberships, sizeof(int), 0644, NULL, &proc_dointvec}, #endif + {NET_IPV4_TCP_DISABLE_DELACKS, "tcp_disable_delacks", + &sysctl_tcp_disable_delacks, sizeof(int), 0644, NULL, &proc_dointvec}, {0} }; diff -urN 2.2.10/net/ipv4/tcp_input.c 2.2.10-MPI/net/ipv4/tcp_input.c --- 2.2.10/net/ipv4/tcp_input.c Tue Jul 13 00:33:23 1999 +++ 2.2.10-MPI/net/ipv4/tcp_input.c Thu Jul 22 12:18:31 1999 @@ -82,6 +82,8 @@ int sysctl_tcp_stdurg; int sysctl_tcp_rfc1337; +int sysctl_tcp_disable_delacks; + static int prune_queue(struct sock *sk); /* There is something which you must keep in mind when you analyze the @@ -1603,7 +1605,9 @@ /* We entered "quick ACK" mode or... */ tcp_in_quickack_mode(tp) || /* We have out of order data */ - (skb_peek(&tp->out_of_order_queue) != NULL)) { + (skb_peek(&tp->out_of_order_queue) != NULL) || + /* we are allowed to disable the delacks and TCP_NODELAY is set */ + (sysctl_tcp_disable_delacks && sk->nonagle == 1)) { /* Then ack it now */ tcp_send_ack(sk); } else {