aboutsummaryrefslogtreecommitdiff
path: root/sys/netgraph/ng_socket.c
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2020-02-05 03:06:29 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2020-02-05 03:06:29 +0000
commit940508a5beb61bf614c10e6e6e8763303c5b9ab6 (patch)
tree8500a99b2b55ba5d2d711a91b214c7e271243e55 /sys/netgraph/ng_socket.c
parent4c02c20c32d8b4e1948a67a0bc069e8ead49a701 (diff)
downloadsrc-940508a5beb61bf614c10e6e6e8763303c5b9ab6.tar.gz
src-940508a5beb61bf614c10e6e6e8763303c5b9ab6.zip
Enter the network epoch when ng_socket sends data or control from user
land to the netgraph and potentially further down the network stack.
Notes
Notes: svn path=/head/; revision=357558
Diffstat (limited to 'sys/netgraph/ng_socket.c')
-rw-r--r--sys/netgraph/ng_socket.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c
index 08ee76300ae8..6339ce0e2ccf 100644
--- a/sys/netgraph/ng_socket.c
+++ b/sys/netgraph/ng_socket.c
@@ -58,6 +58,8 @@
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/mutex.h>
+#include <sys/proc.h>
+#include <sys/epoch.h>
#include <sys/priv.h>
#include <sys/protosw.h>
#include <sys/queue.h>
@@ -217,6 +219,7 @@ static int
ngc_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
struct mbuf *control, struct thread *td)
{
+ struct epoch_tracker et;
struct ngpcb *const pcbp = sotongpcb(so);
struct ngsock *const priv = NG_NODE_PRIVATE(pcbp->sockdata->node);
struct sockaddr_ng *const sap = (struct sockaddr_ng *) addr;
@@ -335,7 +338,9 @@ ngc_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
item->apply = &apply;
priv->error = -1;
+ NET_EPOCH_ENTER(et);
error = ng_snd_item(item, 0);
+ NET_EPOCH_EXIT(et);
mtx_lock(&priv->mtx);
if (priv->error == -1)
@@ -403,6 +408,7 @@ static int
ngd_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
struct mbuf *control, struct thread *td)
{
+ struct epoch_tracker et;
struct ngpcb *const pcbp = sotongpcb(so);
struct sockaddr_ng *const sap = (struct sockaddr_ng *) addr;
int len, error;
@@ -459,7 +465,9 @@ ngd_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr,
}
/* Send data. */
+ NET_EPOCH_ENTER(et);
NG_SEND_DATA_FLAGS(error, hook, m, NG_WAITOK);
+ NET_EPOCH_EXIT(et);
release:
if (control != NULL)