diff options
author | ae <ae@FreeBSD.org> | 2014-01-02 08:40:37 +0000 |
---|---|---|
committer | ae <ae@FreeBSD.org> | 2014-01-02 08:40:37 +0000 |
commit | 4b9dcf4e758fb36bc823ff1c398cefe475eda2a6 (patch) | |
tree | 90a85cde7dc5f8afdd3406e0a53b44a42e6e8077 /sys/netinet | |
parent | 37d46199e9d73bd67f43aef06394bf6f2bb1acbd (diff) | |
download | FreeBSD-src-4b9dcf4e758fb36bc823ff1c398cefe475eda2a6.zip FreeBSD-src-4b9dcf4e758fb36bc823ff1c398cefe475eda2a6.tar.gz |
lla_lookup() does modification only when LLE_CREATE is specified.
Thus we can use IF_AFDATA_RLOCK() instead of IF_AFDATA_LOCK() when doing
lla_lookup() without LLE_CREATE flag.
Reviewed by: glebius, adrian
MFC after: 1 week
Sponsored by: Yandex LLC
Diffstat (limited to 'sys/netinet')
-rw-r--r-- | sys/netinet/if_ether.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c index 6228ea4..a26e179 100644 --- a/sys/netinet/if_ether.c +++ b/sys/netinet/if_ether.c @@ -149,10 +149,10 @@ arp_ifscrub(struct ifnet *ifp, uint32_t addr) addr4.sin_len = sizeof(addr4); addr4.sin_family = AF_INET; addr4.sin_addr.s_addr = addr; - IF_AFDATA_LOCK(ifp); + IF_AFDATA_RLOCK(ifp); lla_lookup(LLTABLE(ifp), (LLE_DELETE | LLE_IFADDR), (struct sockaddr *)&addr4); - IF_AFDATA_UNLOCK(ifp); + IF_AFDATA_RUNLOCK(ifp); } #endif @@ -801,9 +801,9 @@ reply: struct llentry *lle = NULL; sin.sin_addr = itaddr; - IF_AFDATA_LOCK(ifp); + IF_AFDATA_RLOCK(ifp); lle = lla_lookup(LLTABLE(ifp), 0, (struct sockaddr *)&sin); - IF_AFDATA_UNLOCK(ifp); + IF_AFDATA_RUNLOCK(ifp); if ((lle != NULL) && (lle->la_flags & LLE_PUB)) { (void)memcpy(ar_tha(ah), ar_sha(ah), ah->ar_hln); |