summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/in6.c
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2009-06-21 19:30:33 +0000
committerrwatson <rwatson@FreeBSD.org>2009-06-21 19:30:33 +0000
commit1f7e54e8c51edb13935d195e0c1f2ec68c672794 (patch)
tree2cfffa4418c1fa90f1e9d094aa882742d0ababb9 /sys/netinet6/in6.c
parent2fc79768f33d575d200ae1482dc23207f9d93703 (diff)
downloadFreeBSD-src-1f7e54e8c51edb13935d195e0c1f2ec68c672794.zip
FreeBSD-src-1f7e54e8c51edb13935d195e0c1f2ec68c672794.tar.gz
Clean up common ifaddr management:
- Unify reference count and lock initialization in a single function, ifa_init(). - Move tear-down from a macro (IFAFREE) to a function ifa_free(). - Move reference count bump from a macro (IFAREF) to a function ifa_ref(). - Instead of using a u_int protected by a mutex to refcount(9) for reference count management. The ifa_mtx is now used for exactly one ioctl, and possibly should be removed. MFC after: 3 weeks
Diffstat (limited to 'sys/netinet6/in6.c')
-rw-r--r--sys/netinet6/in6.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c
index 74d5498b..441e02f 100644
--- a/sys/netinet6/in6.c
+++ b/sys/netinet6/in6.c
@@ -784,9 +784,9 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
if (ia == NULL)
return (ENOBUFS);
bzero((caddr_t)ia, sizeof(*ia));
+ ifa_init(&ia->ia_ifa);
LIST_INIT(&ia->ia6_memberships);
/* Initialize the address and masks, and put time stamp */
- IFA_LOCK_INIT(&ia->ia_ifa);
ia->ia_ifa.ifa_addr = (struct sockaddr *)&ia->ia_addr;
ia->ia_addr.sin6_family = AF_INET6;
ia->ia_addr.sin6_len = sizeof(ia->ia_addr);
@@ -811,7 +811,6 @@ in6_update_ifa(struct ifnet *ifp, struct in6_aliasreq *ifra,
} else
V_in6_ifaddr = ia;
- ia->ia_ifa.ifa_refcnt = 1;
IF_ADDR_LOCK(ifp);
TAILQ_INSERT_TAIL(&ifp->if_addrhead, &ia->ia_ifa, ifa_link);
IF_ADDR_UNLOCK(ifp);
@@ -1387,7 +1386,7 @@ in6_unlink_ifa(struct in6_ifaddr *ia, struct ifnet *ifp)
* release another refcnt for the link from in6_ifaddr.
* Note that we should decrement the refcnt at least once for all *BSD.
*/
- IFAFREE(&oia->ia_ifa);
+ ifa_free(&oia->ia_ifa);
splx(s);
}
OpenPOWER on IntegriCloud