svn commit: r186209 - head/sys/net

Robert Watson rwatson at FreeBSD.org
Wed Dec 17 14:49:29 UTC 2008


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);
> }
>
>


More information about the svn-src-all mailing list