patch-2.0.34 linux/net/ipv4/tcp.c

Next file: linux/net/ipv4/tcp_input.c
Previous file: linux/net/ipv4/route.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.0.33/linux/net/ipv4/tcp.c linux/net/ipv4/tcp.c
@@ -740,16 +740,8 @@
 
 	if (type == ICMP_SOURCE_QUENCH)
 	{
-		/*
-		 * FIXME:
-		 * Follow BSD for now and just reduce cong_window to 1 again.
-		 * It is possible that we just want to reduce the
-		 * window by 1/2, or that we want to reduce ssthresh by 1/2
-		 * here as well.
-		 */
-		sk->cong_window = 1;
-		sk->cong_count = 0;
-		sk->high_seq = sk->sent_seq;
+		/* Current practice says these frames are bad, plus the drops
+		   will account right anyway. If we act on this we stall doubly */
 		return;
 	}
 
@@ -2075,9 +2067,11 @@
 	add_wait_queue(sk->sleep, &wait);
 	for (;;) {
 		current->state = TASK_INTERRUPTIBLE;
+		end_bh_atomic();
 		release_sock(sk);
 		schedule();
 		lock_sock(sk);
+		start_bh_atomic();
 		skb = tcp_find_established(sk);
 		if (skb)
 			break;
@@ -2109,7 +2103,7 @@
 	if (sk->state != TCP_LISTEN)
 		goto no_listen;
 
-	lock_sock(sk);
+	lock_sock(sk);start_bh_atomic();
 
 	skb = tcp_find_established(sk);
 	if (skb) {
@@ -2120,6 +2114,7 @@
 		sk->ack_backlog--;
 		error = 0;
 out:
+		end_bh_atomic();
 		release_sock(sk);
 no_listen:
 		sk->err = error;

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov