summaryrefslogtreecommitdiffstats
path: root/sys/netinet/if_ether.c
diff options
context:
space:
mode:
authormelifaro <melifaro@FreeBSD.org>2015-09-15 06:48:19 +0000
committermelifaro <melifaro@FreeBSD.org>2015-09-15 06:48:19 +0000
commitb42c7af3b5c2f710974dadca023300f3607c6dae (patch)
tree69fe12c7b39f157912275e7decabcd281efb18dd /sys/netinet/if_ether.c
parent08f689683b70b0bfa3c746259f1038cc089c5f7c (diff)
downloadFreeBSD-src-b42c7af3b5c2f710974dadca023300f3607c6dae.zip
FreeBSD-src-b42c7af3b5c2f710974dadca023300f3607c6dae.tar.gz
* Require explicitl lle unlink prior to calling llentry_delete().
This one slightly decreases time of holding afdata wlock. * While here, make nd6_free() return void. No one has used its return value since r186119.
Diffstat (limited to 'sys/netinet/if_ether.c')
-rw-r--r--sys/netinet/if_ether.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/sys/netinet/if_ether.c b/sys/netinet/if_ether.c
index 39264a5..bba5463 100644
--- a/sys/netinet/if_ether.c
+++ b/sys/netinet/if_ether.c
@@ -194,16 +194,14 @@ arptimer(void *arg)
/* Guard against race with other llentry_free(). */
if (lle->la_flags & LLE_LINKED) {
-
- size_t pkts_dropped;
LLE_REMREF(lle);
- pkts_dropped = llentry_free(lle);
- ARPSTAT_ADD(dropped, pkts_dropped);
- } else
- LLE_FREE_LOCKED(lle);
-
+ lltable_unlink_entry(lle->lle_tbl, lle);
+ }
IF_AFDATA_UNLOCK(ifp);
+ size_t pkts_dropped = llentry_free(lle);
+
+ ARPSTAT_ADD(dropped, pkts_dropped);
ARPSTAT_INC(timeouts);
CURVNET_RESTORE();
OpenPOWER on IntegriCloud