Date: Thu, 2 Jun 2011 04:57:09 +0000 From: "Bjoern A. Zeeb" <bz@FreeBSD.org> To: Robert Watson <rwatson@FreeBSD.org> Cc: current@FreeBSD.org Subject: Re: FYI: merging TCP, UDP, netisr locking changes Message-ID: <B1362197-7468-4738-A0DE-D82E7344011C@FreeBSD.org> In-Reply-To: <alpine.BSF.2.00.1105301051260.60306@fledge.watson.org> References: <alpine.BSF.2.00.1105241220100.9704@fledge.watson.org> <alpine.BSF.2.00.1105301051260.60306@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On May 30, 2011, at 9:53 AM, Robert Watson wrote:
>> This work has been sponsored by Juniper Networks. Thanks also to =
Bjoern Zeeb, who has been reviewing changes!
And pointy hat to me for missing this one:(
> After a series of smaller commits, I've just merged some initial =
decomposition of the pcbinfo lock into an additional pcbhash lock, which =
changes lock ordering and lookup with respect to inpcbs significantly =
(r222488; commit message below). I expect there to be some initial =
instability as people shake out edge cases I didn't bump into in my =
testing. Please report bugs to current@, and I'll pick them up there!
Can you review the following I found this morning on my IPv6 only
snapshot VM. We need to make sure all the src/tools/regression test
cases equally run IPv6. Patches certainly welcome from the community!
!
! Do not leak the pcbinfohash lock in case in6_pcbladdr() errors
! for a tcp connect on IPv6.
!
! Submitted by: bz
!
Index: sys/netinet/tcp_usrreq.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- sys/netinet/tcp_usrreq.c (revision 222591)
+++ sys/netinet/tcp_usrreq.c (working copy)
@@ -1158,7 +1158,7 @@ tcp6_connect(struct tcpcb *tp, struct sockaddr *na
*/
error =3D in6_pcbladdr(inp, nam, &addr6);
if (error)
- return error;
+ goto out;
oinp =3D in6_pcblookup_hash_locked(inp->inp_pcbinfo,
&sin6->sin6_addr, sin6->sin6_port,
=
IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)
--=20
Bjoern A. Zeeb You have to have visions!
Stop bit received. Insert coin for new address family.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?B1362197-7468-4738-A0DE-D82E7344011C>
