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.16, 2003-11-09 03:42:59-02:00, acme@conectiva.com.br
  o IPV4: reorganize some release_sock exit paths
  
  Before:
  
     text    data     bss     dec     hex filename
   292456   11392    6692  310540   4bd0c net/ipv4/built-in.o
  
  After:
  
     text    data     bss     dec     hex filename
   290952   11392    6692  309036   4b72c net/ipv4/built-in.o
  
  0.51% down, but it all adds up! :-)


 af_inet.c     |   12 ++++++----
 ip_sockglue.c |   66 +++++++++++++++++++++++++++-------------------------------
 tcp.c         |   18 ++++++---------
 3 files changed, 45 insertions(+), 51 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:43 2003
+++ b/net/ipv4/af_inet.c	Sat Nov 15 17:03:43 2003
@@ -246,18 +246,20 @@
 static int inet_autobind(struct sock *sk)
 {
 	struct inet_opt *inet;
+	int rc;
 	/* We may need to bind the socket. */
 	lock_sock(sk);
 	inet = inet_sk(sk);
 	if (!inet->num) {
-		if (sk->sk_prot->get_port(sk, 0)) {
-			release_sock(sk);
-			return -EAGAIN;
-		}
+		rc = -EAGAIN;
+		if (sk->sk_prot->get_port(sk, 0))
+			goto out;
 		inet->sport = htons(inet->num);
 	}
+	rc = 0;
+out:
 	release_sock(sk);
-	return 0;
+	return rc;
 }
 
 /*
diff -Nru a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
--- a/net/ipv4/ip_sockglue.c	Sat Nov 15 17:03:43 2003
+++ b/net/ipv4/ip_sockglue.c	Sat Nov 15 17:03:43 2003
@@ -832,12 +832,13 @@
 #endif
 			break;
 	}
+out:
 	release_sock(sk);
 	return err;
 
 e_inval:
-	release_sock(sk);
-	return -EINVAL;
+	err = -EINVAL;
+	goto out;
 }
 
 /*
@@ -848,8 +849,7 @@
 int ip_getsockopt(struct sock *sk, int level, int optname, char *optval, int *optlen)
 {
 	struct inet_opt *inet = inet_sk(sk);
-	int val;
-	int len;
+	int val, len, rc;
 	
 	if(level!=SOL_IP)
 		return -EOPNOTSUPP;
@@ -930,10 +930,9 @@
 				val = dst_pmtu(dst) - dst->header_len;
 				dst_release(dst);
 			}
-			if (!val) {
-				release_sock(sk);
-				return -ENOTCONN;
-			}
+			rc = -ENOTCONN;
+			if (!val)
+				goto out_release_sock;
 			break;
 		}
 		case IP_RECVERR:
@@ -961,38 +960,30 @@
 		case IP_MSFILTER:
 		{
 			struct ip_msfilter msf;
-			int err;
 
-			if (len < IP_MSFILTER_SIZE(0)) {
-				release_sock(sk);
-				return -EINVAL;
-			}
-			if (copy_from_user(&msf, optval, IP_MSFILTER_SIZE(0))) {
-				release_sock(sk);
-				return -EFAULT;
-			}
-			err = ip_mc_msfget(sk, &msf,
+			rc = -EINVAL;
+			if (len < IP_MSFILTER_SIZE(0))
+				goto out_release_sock;
+			rc = -EFAULT;
+			if (copy_from_user(&msf, optval, IP_MSFILTER_SIZE(0)))
+				goto out_release_sock;
+			rc = ip_mc_msfget(sk, &msf,
 				(struct ip_msfilter *)optval, optlen);
-			release_sock(sk);
-			return err;
+			goto out_release_sock;
 		}
 		case MCAST_MSFILTER:
 		{
 			struct group_filter gsf;
-			int err;
 
-			if (len < GROUP_FILTER_SIZE(0)) {
-				release_sock(sk);
-				return -EINVAL;
-			}
-			if (copy_from_user(&gsf, optval, GROUP_FILTER_SIZE(0))) {
-				release_sock(sk);
-				return -EFAULT;
-			}
-			err = ip_mc_gsfget(sk, &gsf,
+			rc = -EINVAL;
+			if (len < GROUP_FILTER_SIZE(0))
+				goto out_release_sock;
+			rc = -EFAULT;
+			if (copy_from_user(&gsf, optval, GROUP_FILTER_SIZE(0)))
+				goto out_release_sock;
+			rc = ip_mc_gsfget(sk, &gsf,
 				(struct group_filter *)optval, optlen);
-			release_sock(sk);
-			return err;
+			goto out_release_sock;
 		}
 		case IP_PKTOPTIONS:		
 		{
@@ -1034,8 +1025,8 @@
 				val = put_user(len, optlen);
 			return val;
 #else
-			release_sock(sk);
-			return -ENOPROTOOPT;
+			rc = -ENOPROTOOPT;
+			goto out_release_sock;
 #endif
 	}
 	release_sock(sk);
@@ -1054,7 +1045,12 @@
 		if(copy_to_user(optval,&val,len))
 			return -EFAULT;
 	}
-	return 0;
+	rc = 0;
+out:
+	return rc;
+out_release_sock:
+	release_sock(sk);
+	goto out;
 }
 
 EXPORT_SYMBOL(ip_cmsg_recv);
diff -Nru a/net/ipv4/tcp.c b/net/ipv4/tcp.c
--- a/net/ipv4/tcp.c	Sat Nov 15 17:03:43 2003
+++ b/net/ipv4/tcp.c	Sat Nov 15 17:03:43 2003
@@ -1224,6 +1224,7 @@
 out:
 	if (copied)
 		tcp_push(sk, tp, flags, mss_now, tp->nonagle);
+out_tcp_check_timer:
 	TCP_CHECK_TIMER(sk);
 	release_sock(sk);
 	return copied;
@@ -1240,10 +1241,8 @@
 	if (copied)
 		goto out;
 out_err:
-	err = tcp_error(sk, flags, err);
-	TCP_CHECK_TIMER(sk);
-	release_sock(sk);
-	return err;
+	copied = tcp_error(sk, flags, err);
+	goto out_tcp_check_timer;
 }
 
 /*
@@ -1788,10 +1787,7 @@
 	/* Clean up data we have read: This will do ACK frames. */
 	cleanup_rbuf(sk, copied);
 
-	TCP_CHECK_TIMER(sk);
-	release_sock(sk);
-	return copied;
-
+	err = copied;
 out:
 	TCP_CHECK_TIMER(sk);
 	release_sock(sk);
@@ -2259,13 +2255,13 @@
 	tcp_acceptq_removed(sk);
 	tcp_openreq_fastfree(req);
 	BUG_TRAP(newsk->sk_state != TCP_SYN_RECV);
+out_release_sock:
 	release_sock(sk);
 	return newsk;
-
 out:
-	release_sock(sk);
 	*err = error;
-	return NULL;
+	newsk = NULL;
+	goto out_release_sock;
 }
 
 /*

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


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


M'XL( (]XMC\  ^U876_B.!1])K_"H]&N6BT)MN-\=EL-TW:Z:+L%T78>]B4*
MB8$(B%%BVLZ('[_73H="@3)T=Q\JE2*Y_LBYU\?WW.OP$=V6O AK<3+AQD?T
MARAE6$M$SA.9W<56(B96KX")KA PT1B*"6^HM8W>B#9R+DUJN18Q8$4GELD0
MW?&B#&O$LA<C\MN4A[7N^<7M9;-K&,?'Z'08YP-^S24Z/C:D*.[B<5I^BN5P
M+')+%G%>3KC4MN>+I7.*,84_AW@V=MPY<3'SY@E)"8D9X2FFS'>9H5S[]-S]
M512;$!Q@AU';GV,&'>,,$8LPPBQF$1=ANT%( P?P3\AHZ 0FIB'&:",T^LU&
M)C8^H_]V&Z=&@@1J=;ZR$!5<%(,XS[YS5 +[T!_SN.11*9(1X@^91%.P6<(3
M\/W,^Z+@8=6!C^0/4K5I+&/5HEY9ZC;E>AX-^0/J9V.>QW#^,$0#RAP7)@BQ
M ZI6N*YJ;0*48>BR7HH3!"??R*9WK-&;96-I9KDE*IO-OH1P^C?V<>#0#?;A
MS&Q7V_?H"_:QY9!?4"KN\SKJS20">N+Q&,5I6J+9] ,*S4/C3\2P3XW.4R :
MYIX?P\ Q-DYV'/O"R[@?9="QDN7S#QQ_3AV?V'//):GKP#Y[-DMPXF^.M2UP
MBWAV\!P3RNR?=RN;ZB@:C&=\W36& P]"LY_8J9,F,7;2OMO;Z=H:Y+)[3N!X
M>[@GD^D&QGP?A)MXB9_Z:4IHVN.TU]OEU@)JV1WJPX#.2.O,[DY-KSW<+3EJ
MR^'B !1!E<-SC .?Z&3EDK4LA5_.4AXRG?<L]<:RE!9S&YG%O?Y"UNELB-17
MY*X6G!\B1BW+)2J2(^.,.C9B, R<VD:M5D#X(_.\>=%L71U!/^NC@W)DGI2C
M:%H(:9X,N(RFHI P6D?X\!#6U 9""B1F\DCA^(@:%0P^,F P!!LN!INMJJD5
M7,Z*7%M?$>!*_MA#A*](9;N$N)[*0(R^P@55.QYDD>KF$.PK1IL@TWZ7XUN3
M8U6]MNEQ)5I>HTG?9B",2BN^'8" 6CZ0!SKB1:'UV+KZVKP$/3XI[<QWB%X(
MNW_4,P14'0$U]4K9@:V5'=B5LG](^ZI]<]J^TN+6ZOX CVD5+\"CY9!10*YR
M#QH7!8#G,>0MX?UPK4(#\^AWB,3HK^LOK<N;\VYTW?K[_. Q46PS\83VI7E[
M>;- 2\3T6]0OQ"2:P:O*P:^3LE]'8BKU3C<9^2DK<%Z3) (LR&4ZC6E<V*#G
M*D8A82A&7^##IYH/GVD^(-QV\7'1;=]VHO^!D,$R(1NM[,'(8(F10<5(P#0C
M@?,R(P3;GEH(K4[_2\'6Z;9OVNU.M87MSSN*\Y9NW6?E8[E@/']6SSYUP??#
M%96L%!A]$]RCL.QQ"=U54-8OH30 *->ANI" AO>_U1'R7D?>6!VI7CNVU1$=
M)*^I'X12MRH@$6!$R9 GHTAF$\7(F;I*JCH K4IO-4@A&4]!7VHIU!=1:,7W
MQ_&@K",86%;0<SRE52\@&L\+5%EX+%$5JKH 4GA%(1N$>@8SNHY ZSZVOKX6
JJA8<R_E].0*HJ]O+Y5+W+%<L?ES27I6SR3'V>6![F!G_ +;]YD+1$@