svn commit: r307062 - head/sys/net
Andrey V. Elsukov
ae at FreeBSD.org
Tue Oct 11 17:41:14 UTC 2016
Author: ae
Date: Tue Oct 11 17:41:13 2016
New Revision: 307062
URL: https://svnweb.freebsd.org/changeset/base/307062
Log:
Make LLTABLE list lock private for if_llatbl.c
Rename lock and macros to reflect that it protects V_lltables list.
Modified:
head/sys/net/if_llatbl.c
head/sys/net/if_llatbl.h
Modified: head/sys/net/if_llatbl.c
==============================================================================
--- head/sys/net/if_llatbl.c Tue Oct 11 17:12:26 2016 (r307061)
+++ head/sys/net/if_llatbl.c Tue Oct 11 17:41:13 2016 (r307062)
@@ -66,8 +66,13 @@ static VNET_DEFINE(SLIST_HEAD(, lltable)
SLIST_HEAD_INITIALIZER(lltables);
#define V_lltables VNET(lltables)
-struct rwlock lltable_rwlock;
-RW_SYSINIT(lltable_rwlock, &lltable_rwlock, "lltable_rwlock");
+static struct rwlock lltable_list_lock;
+RW_SYSINIT(lltable_list_lock, &lltable_list_lock, "lltable_list_lock");
+#define LLTABLE_LIST_RLOCK() rw_rlock(&lltable_list_lock)
+#define LLTABLE_LIST_RUNLOCK() rw_runlock(&lltable_list_lock)
+#define LLTABLE_LIST_WLOCK() rw_wlock(&lltable_list_lock)
+#define LLTABLE_LIST_WUNLOCK() rw_wunlock(&lltable_list_lock)
+#define LLTABLE_LIST_LOCK_ASSERT() rw_assert(&lltable_list_lock, RA_LOCKED)
static void lltable_unlink(struct lltable *llt);
static void llentries_unlink(struct lltable *llt, struct llentries *head);
@@ -85,7 +90,7 @@ lltable_dump_af(struct lltable *llt, str
{
int error;
- LLTABLE_LOCK_ASSERT();
+ LLTABLE_LIST_LOCK_ASSERT();
if (llt->llt_ifp->if_flags & IFF_LOOPBACK)
return (0);
@@ -108,7 +113,7 @@ lltable_sysctl_dumparp(int af, struct sy
struct lltable *llt;
int error = 0;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af == af) {
error = lltable_dump_af(llt, wr);
@@ -117,7 +122,7 @@ lltable_sysctl_dumparp(int af, struct sy
}
}
done:
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
return (error);
}
@@ -531,7 +536,7 @@ lltable_drain(int af)
struct llentry *lle;
register int i;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af != af)
continue;
@@ -547,7 +552,7 @@ lltable_drain(int af)
}
}
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
}
#endif
@@ -591,14 +596,14 @@ lltable_prefix_free(int af, struct socka
{
struct lltable *llt;
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af != af)
continue;
llt->llt_prefix_free(llt, addr, mask, flags);
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
}
struct lltable *
@@ -632,18 +637,18 @@ void
lltable_link(struct lltable *llt)
{
- LLTABLE_WLOCK();
+ LLTABLE_LIST_WLOCK();
SLIST_INSERT_HEAD(&V_lltables, llt, llt_link);
- LLTABLE_WUNLOCK();
+ LLTABLE_LIST_WUNLOCK();
}
static void
lltable_unlink(struct lltable *llt)
{
- LLTABLE_WLOCK();
+ LLTABLE_LIST_WLOCK();
SLIST_REMOVE(&V_lltables, llt, lltable, llt_link);
- LLTABLE_WUNLOCK();
+ LLTABLE_LIST_WUNLOCK();
}
@@ -739,13 +744,13 @@ lla_rt_output(struct rt_msghdr *rtm, str
}
/* XXX linked list may be too expensive */
- LLTABLE_RLOCK();
+ LLTABLE_LIST_RLOCK();
SLIST_FOREACH(llt, &V_lltables, llt_link) {
if (llt->llt_af == dst->sa_family &&
llt->llt_ifp == ifp)
break;
}
- LLTABLE_RUNLOCK();
+ LLTABLE_LIST_RUNLOCK();
KASSERT(llt != NULL, ("Yep, ugly hacks are bad\n"));
error = 0;
Modified: head/sys/net/if_llatbl.h
==============================================================================
--- head/sys/net/if_llatbl.h Tue Oct 11 17:12:26 2016 (r307061)
+++ head/sys/net/if_llatbl.h Tue Oct 11 17:41:13 2016 (r307062)
@@ -37,17 +37,9 @@ struct ifnet;
struct sysctl_req;
struct rt_msghdr;
struct rt_addrinfo;
-
struct llentry;
LIST_HEAD(llentries, llentry);
-extern struct rwlock lltable_rwlock;
-#define LLTABLE_RLOCK() rw_rlock(&lltable_rwlock)
-#define LLTABLE_RUNLOCK() rw_runlock(&lltable_rwlock)
-#define LLTABLE_WLOCK() rw_wlock(&lltable_rwlock)
-#define LLTABLE_WUNLOCK() rw_wunlock(&lltable_rwlock)
-#define LLTABLE_LOCK_ASSERT() rw_assert(&lltable_rwlock, RA_LOCKED)
-
#define LLE_MAX_LINKHDR 24 /* Full IB header */
/*
* Code referencing llentry must at least hold
More information about the svn-src-all
mailing list