Date: Wed, 17 Dec 2008 14:49:28 +0000 (GMT) From: Robert Watson <rwatson@FreeBSD.org> To: Kip Macy <kmacy@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r186209 - head/sys/net Message-ID: <alpine.BSF.1.10.0812171448130.75599@fledge.watson.org> In-Reply-To: <200812170433.mBH4XqkH057618@svn.freebsd.org> References: <200812170433.mBH4XqkH057618@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 17 Dec 2008, Kip Macy wrote: > Author: kmacy > Date: Wed Dec 17 04:33:52 2008 > New Revision: 186209 > URL: http://svn.freebsd.org/changeset/base/186209 > > Log: > avoid trying to acquire a shared lock while holding an exclusive lock > by making the ifnet lock acquisition exclusive This seems unfortunate as the ifindex arrays get dereferenced a moderate amount; perhaps ifnet_byindex_locked() and ifaddr_byindex_locked() should be added for those special-case callers that are aware of ifnet locking? Robert N M Watson Computer Laboratory University of Cambridge > > Modified: > head/sys/net/if.c > > Modified: head/sys/net/if.c > ============================================================================== > --- head/sys/net/if.c Wed Dec 17 04:15:38 2008 (r186208) > +++ head/sys/net/if.c Wed Dec 17 04:33:52 2008 (r186209) > @@ -197,9 +197,9 @@ ifnet_byindex(u_short idx) > INIT_VNET_NET(curvnet); > struct ifnet *ifp; > > - IFNET_RLOCK(); > + IFNET_WLOCK(); > ifp = V_ifindex_table[idx].ife_ifnet; > - IFNET_RUNLOCK(); > + IFNET_WUNLOCK(); > return (ifp); > } > > @@ -218,9 +218,9 @@ ifaddr_byindex(u_short idx) > { > struct ifaddr *ifa; > > - IFNET_RLOCK(); > + IFNET_WLOCK(); > ifa = ifnet_byindex(idx)->if_addr; > - IFNET_RUNLOCK(); > + IFNET_WUNLOCK(); > return (ifa); > } > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.1.10.0812171448130.75599>