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$LA3KC4MN>+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?=%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[0MX?UPK4(#\^AWB,3HK^LOK;- 2\3T6]0OQ"2:P:O*P:^3LE]'8BKU3C<9^2DK<%Z3) (LR&4ZC6EANI" 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@8SNHY ZSZVOKX6 JJA86![F!G_ +;]YD+1$@