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


_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to