diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-02-05 03:06:29 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2020-02-05 03:06:29 +0000 |
commit | 940508a5beb61bf614c10e6e6e8763303c5b9ab6 (patch) | |
tree | 8500a99b2b55ba5d2d711a91b214c7e271243e55 /sys/netgraph/ng_socket.c | |
parent | 4c02c20c32d8b4e1948a67a0bc069e8ead49a701 (diff) | |
download | src-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.c | 8 |
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) |