summaryrefslogtreecommitdiffstats
path: root/sys/net/if_var.h
diff options
context:
space:
mode:
authorglebius <glebius@FreeBSD.org>2012-08-02 13:57:49 +0000
committerglebius <glebius@FreeBSD.org>2012-08-02 13:57:49 +0000
commitabf245020a075c487a1ac4e60c7069e2d8c9c7c3 (patch)
treebc9d35350ff3e80778a0341908f6905a862f4004 /sys/net/if_var.h
parent34fe3f296a23dcd2b2315ab9b7cbe217a7e36c17 (diff)
downloadFreeBSD-src-abf245020a075c487a1ac4e60c7069e2d8c9c7c3.zip
FreeBSD-src-abf245020a075c487a1ac4e60c7069e2d8c9c7c3.tar.gz
Fix races between in_lltable_prefix_free(), lla_lookup(),
llentry_free() and arptimer(): o Use callout_init_rw() for lle timeout, this allows us safely disestablish them. - This allows us to simplify the arptimer() and make it race safe. o Consistently use ifp->if_afdata_lock to lock access to linked lists in the lle hashes. o Introduce new lle flag LLE_LINKED, which marks an entry that is attached to the hash. - Use LLE_LINKED to avoid double unlinking via consequent calls to llentry_free(). - Mark lle with LLE_DELETED via |= operation istead of =, so that other flags won't be lost. o Make LLE_ADDREF(), LLE_REMREF() and LLE_FREE_LOCKED() more consistent and provide more informative KASSERTs. The patch is a collaborative work of all submitters and myself. PR: kern/165863 Submitted by: Andrey Zonov <andrey zonov.org> Submitted by: Ryan Stone <rysto32 gmail.com> Submitted by: Eric van Gyzen <eric_van_gyzen dell.com>
Diffstat (limited to 'sys/net/if_var.h')
-rw-r--r--sys/net/if_var.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/net/if_var.h b/sys/net/if_var.h
index 3d57953..a244359 100644
--- a/sys/net/if_var.h
+++ b/sys/net/if_var.h
@@ -415,6 +415,8 @@ EVENTHANDLER_DECLARE(group_change_event, group_change_event_handler_t);
#define IF_AFDATA_DESTROY(ifp) rw_destroy(&(ifp)->if_afdata_lock)
#define IF_AFDATA_LOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_LOCKED)
+#define IF_AFDATA_RLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_RLOCKED)
+#define IF_AFDATA_WLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_WLOCKED)
#define IF_AFDATA_UNLOCK_ASSERT(ifp) rw_assert(&(ifp)->if_afdata_lock, RA_UNLOCKED)
int if_handoff(struct ifqueue *ifq, struct mbuf *m, struct ifnet *ifp,
OpenPOWER on IntegriCloud