You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual.

===================================================================


ChangeSet@1.1414.4.18, 2003-11-09 07:15:37-02:00, acme@conectiva.com.br
  o IPV4: use sk_wait_event primitive


 af_inet.c |   13 ++++++-------
 tcp.c     |   37 ++++++++++++-------------------------
 2 files changed, 18 insertions(+), 32 deletions(-)


diff -Nru a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c
--- a/net/ipv4/af_inet.c	Sat Nov 15 17:03:29 2003
+++ b/net/ipv4/af_inet.c	Sat Nov 15 17:03:29 2003
@@ -568,20 +568,19 @@
 {
 	DEFINE_WAIT(wait);
 
-	prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
-
 	/* Basic assumption: if someone sets sk->sk_err, he _must_
 	 * change state of the socket from TCP_SYN_*.
 	 * Connect() does not allow to get error notifications
 	 * without closing the socket.
 	 */
-	while ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) {
-		release_sock(sk);
-		timeo = schedule_timeout(timeo);
-		lock_sock(sk);
+	while (1) {
+		prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
+		if (sk_wait_event(sk, &timeo,
+				  !((1 << sk->sk_state) &
+				    (TCPF_SYN_SENT | TCPF_SYN_RECV))))
+			break;
 		if (signal_pending(current) || !timeo)
 			break;
-		prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
 	}
 	finish_wait(sk->sk_sleep, &wait);
 	return timeo;
diff -Nru a/net/ipv4/tcp.c b/net/ipv4/tcp.c
--- a/net/ipv4/tcp.c	Sat Nov 15 17:03:29 2003
+++ b/net/ipv4/tcp.c	Sat Nov 15 17:03:29 2003
@@ -659,11 +659,12 @@
  */
 static int wait_for_tcp_connect(struct sock *sk, int flags, long *timeo_p)
 {
+	int rc;
 	struct tcp_opt *tp = tcp_sk(sk);
 	struct task_struct *tsk = current;
 	DEFINE_WAIT(wait);
 
-	while ((1 << sk->sk_state) & ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)) {
+	while (1) {
 		if (sk->sk_err)
 			return sock_error(sk);
 		if ((1 << sk->sk_state) & ~(TCPF_SYN_SENT | TCPF_SYN_RECV))
@@ -675,13 +676,13 @@
 
 		prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
 		tp->write_pending++;
-
-		release_sock(sk);
-		*timeo_p = schedule_timeout(*timeo_p);
-		lock_sock(sk);
-
+		rc = sk_wait_event(sk, timeo_p,
+				   !((1 << sk->sk_state) &
+				     ~(TCPF_ESTABLISHED | TCPF_CLOSE_WAIT)));
 		finish_wait(sk->sk_sleep, &wait);
 		tp->write_pending--;
+		if (rc)
+			break;
 	}
 	return 0;
 }
@@ -722,10 +723,8 @@
 
 		set_bit(SOCK_NOSPACE, &sk->sk_socket->flags);
 		tp->write_pending++;
-		release_sock(sk);
-		if (!tcp_memory_free(sk) || vm_wait)
-			current_timeo = schedule_timeout(current_timeo);
-		lock_sock(sk);
+		sk_wait_event(sk, &current_timeo,
+			      tcp_memory_free(sk) && vm_wait);
 		tp->write_pending--;
 
 		if (vm_wait) {
@@ -1381,12 +1380,7 @@
 	prepare_to_wait(sk->sk_sleep, &wait, TASK_INTERRUPTIBLE);
 
 	set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
-	release_sock(sk);
-
-	if (skb_queue_empty(&sk->sk_receive_queue))
-		timeo = schedule_timeout(timeo);
-
-	lock_sock(sk);
+	sk_wait_event(sk, &timeo, !skb_queue_empty(&sk->sk_receive_queue));
 	clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
 
 	finish_wait(sk->sk_sleep, &wait);
@@ -2015,11 +2009,8 @@
 		do {
 			prepare_to_wait(sk->sk_sleep, &wait,
 					TASK_INTERRUPTIBLE);
-			if (!closing(sk))
+			if (sk_wait_event(sk, &timeout, !closing(sk)))
 				break;
-			release_sock(sk);
-			timeout = schedule_timeout(timeout);
-			lock_sock(sk);
 		} while (!signal_pending(tsk) && timeout);
 
 		finish_wait(sk->sk_sleep, &wait);
@@ -2192,12 +2183,8 @@
 	for (;;) {
 		prepare_to_wait_exclusive(sk->sk_sleep, &wait,
 					  TASK_INTERRUPTIBLE);
-		release_sock(sk);
-		if (!tp->accept_queue)
-			timeo = schedule_timeout(timeo);
-		lock_sock(sk);
 		err = 0;
-		if (tp->accept_queue)
+		if (sk_wait_event(sk, &timeo, tp->accept_queue != NULL))
 			break;
 		err = -EINVAL;
 		if (sk->sk_state != TCP_LISTEN)

===================================================================


This BitKeeper patch contains the following changesets:
1.1414.4.18
## Wrapped with gzip_uu ##


M'XL( (%XMC\  \6686_B.!"&/\>_8JJ5*JHKP78<)]"EVA:X6[2HBX#NZ3Y%
MP;A+!"'9Q%!5%]UOOTEHNTN7EFMUT@8DR_9D_,[,,X9W<)WKK&6%*M;D'7Q,
M<M.R5++2RD2;T%9);$\SW!@E"6XTYDFL&Z5M8[K@C94V=6Y+FQ&T&(9&S6&C
ML[QE,=MY7#%WJ6Y9H]X?UX.+$2'M-G3FX>JK'FL#[38Q2;8)E[/\0VCFRV1E
MFRQ<Y;$VU=G%HVG!*>7X<9GG4%<63%+A%8K-& L%TS/*A2\%*:5]>"I_UXO#
M&&W2)A-4%E107Y N,)L))FQA,Q^HTV"L09M O19S6XY7I[Q%*>QU#;]QJ%-R
M"?]O&!VB(('^\(MHP3K7D"^"VS R@=[HE8$TB^((16CR"03CG R_IY347_D0
M0D-*S@\$@)5N1.E&-(Q*;?5C%$W7+[CO.WZA/.7/_-F,\=E4\^ET?\;VN'JH
MB,M%@0/U_KN<\":(<+)'DNLSI_ DFTE7-OG4$8HJ_Y"D'7<_RG*;PO,K>'^V
M/4SQ6^4^@_-+<EW!75I0QH53<2WY4Z"Y>!EH"77O%P*]S?1GJ&>WU1<)'>Y)
M^ALX[[H> UX./@C2QXR#)-;M/%IJJ+$3^)M85IKI-,QT8))*7RU?U,]1:[[4
M.CV%XW+M%"87XT]!_VK2&XVNAY/^Y:!W<H;O1C=0VXD+9_B.B6*=G.*^90$<
MU6H,WK^'![\F-/H$CN]W 6J3SO#W8/S753#N74V@@,?YJ-?Y<H)/:3K-=+@X
MPTA\ 6R7RJJI7D'D*_KY$(U/^GE+(O=QH2+1=5Y+(L.[E;N_D,7J+GH.Q2K<
M-V#8EY)AU:P(#\L45E%*B?/^=MCAL2L151>W? X.%C[#RL+/B%6$!>D#8P<A
M@W^VF/7&DXO+07_\L==](*TS^#SN!7]>]">(VEEYLL"6V;*=J1WX/.Z6;>1Q
MO[+80[Y:9QE.@N\=4)T.F+D@UG&2W04WF=9HC.J.81-7'O#8+G/P7$GZ.#;+
MI#S;5G"4+Z;!M[5>ZT#'J;FK'=]'G6FEL8K;O3*6+J?XZXZ)OA^MESMVC8U^
MI)9)'JV^E@JQ\[HE7%B(+F?-,O8N1^ JC]OQP!4 )JV?ATKIU&Q5P5$;KJX'
< W3]^&])S;5:Y.NXK4/)PRG7Y%_.7?\[H@D     
 
