Author: ae
Date: Wed Nov 14 17:36:06 2012
New Revision: 243031
URL: http://svnweb.freebsd.org/changeset/base/243031

Log:
  if_afdata lock was converted from mutex to rwlock a long ago, so we can
  replace IF_AFDATA_LOCK() macro depending to the access type.
  
  Sponsored by: Yandex LLC
  MFC after:    1 week

Modified:
  head/sys/netinet6/scope6.c

Modified: head/sys/netinet6/scope6.c
==============================================================================
--- head/sys/netinet6/scope6.c  Wed Nov 14 17:33:00 2012        (r243030)
+++ head/sys/netinet6/scope6.c  Wed Nov 14 17:36:06 2012        (r243031)
@@ -121,11 +121,11 @@ scope6_set(struct ifnet *ifp, struct sco
        int error = 0;
        struct scope6_id *sid = NULL;
 
-       IF_AFDATA_LOCK(ifp);
+       IF_AFDATA_WLOCK(ifp);
        sid = SID(ifp);
 
        if (!sid) {     /* paranoid? */
-               IF_AFDATA_UNLOCK(ifp);
+               IF_AFDATA_WUNLOCK(ifp);
                return (EINVAL);
        }
 
@@ -148,7 +148,7 @@ scope6_set(struct ifnet *ifp, struct sco
                         */
                        if (i == IPV6_ADDR_SCOPE_INTFACELOCAL &&
                            idlist->s6id_list[i] != ifp->if_index) {
-                               IF_AFDATA_UNLOCK(ifp);
+                               IF_AFDATA_WUNLOCK(ifp);
                                return (EINVAL);
                        }
 
@@ -160,7 +160,7 @@ scope6_set(struct ifnet *ifp, struct sco
                                 * IDs, but we check the consistency for
                                 * safety in later use.
                                 */
-                               IF_AFDATA_UNLOCK(ifp);
+                               IF_AFDATA_WUNLOCK(ifp);
                                return (EINVAL);
                        }
 
@@ -172,7 +172,7 @@ scope6_set(struct ifnet *ifp, struct sco
                        sid->s6id_list[i] = idlist->s6id_list[i];
                }
        }
-       IF_AFDATA_UNLOCK(ifp);
+       IF_AFDATA_WUNLOCK(ifp);
 
        return (error);
 }
@@ -180,18 +180,19 @@ scope6_set(struct ifnet *ifp, struct sco
 int
 scope6_get(struct ifnet *ifp, struct scope6_id *idlist)
 {
-       /* We only need to lock the interface's afdata for SID() to work. */
-       IF_AFDATA_LOCK(ifp);
-       struct scope6_id *sid = SID(ifp);
+       struct scope6_id *sid;
 
+       /* We only need to lock the interface's afdata for SID() to work. */
+       IF_AFDATA_RLOCK(ifp);
+       sid = SID(ifp);
        if (sid == NULL) {      /* paranoid? */
-               IF_AFDATA_UNLOCK(ifp);
+               IF_AFDATA_RUNLOCK(ifp);
                return (EINVAL);
        }
 
        *idlist = *sid;
 
-       IF_AFDATA_UNLOCK(ifp);
+       IF_AFDATA_RUNLOCK(ifp);
        return (0);
 }
 
@@ -408,7 +409,7 @@ in6_setscope(struct in6_addr *in6, struc
        u_int32_t zoneid = 0;
        struct scope6_id *sid;
 
-       IF_AFDATA_LOCK(ifp);
+       IF_AFDATA_RLOCK(ifp);
 
        sid = SID(ifp);
 
@@ -425,12 +426,12 @@ in6_setscope(struct in6_addr *in6, struc
         */
        if (IN6_IS_ADDR_LOOPBACK(in6)) {
                if (!(ifp->if_flags & IFF_LOOPBACK)) {
-                       IF_AFDATA_UNLOCK(ifp);
+                       IF_AFDATA_RUNLOCK(ifp);
                        return (EINVAL);
                } else {
                        if (ret_id != NULL)
                                *ret_id = 0; /* there's no ambiguity */
-                       IF_AFDATA_UNLOCK(ifp);
+                       IF_AFDATA_RUNLOCK(ifp);
                        return (0);
                }
        }
@@ -457,7 +458,7 @@ in6_setscope(struct in6_addr *in6, struc
                zoneid = 0;     /* XXX: treat as global. */
                break;
        }
-       IF_AFDATA_UNLOCK(ifp);
+       IF_AFDATA_RUNLOCK(ifp);
 
        if (ret_id != NULL)
                *ret_id = zoneid;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to