Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Feb 2020 03:06:29 +0000 (UTC)
From:      Gleb Smirnoff <glebius@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r357558 - head/sys/netgraph
Message-ID:  <202002050306.01536TFg031127@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Wed Feb  5 03:06:29 2020
New Revision: 357558
URL: https://svnweb.freebsd.org/changeset/base/357558

Log:
  Enter the network epoch when ng_socket sends data or control from user
  land to the netgraph and potentially further down the network stack.

Modified:
  head/sys/netgraph/ng_socket.c

Modified: head/sys/netgraph/ng_socket.c
==============================================================================
--- head/sys/netgraph/ng_socket.c	Wed Feb  5 02:53:40 2020	(r357557)
+++ head/sys/netgraph/ng_socket.c	Wed Feb  5 03:06:29 2020	(r357558)
@@ -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,
 	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,
 	}
 
 	/* Send data. */
+	NET_EPOCH_ENTER(et);
 	NG_SEND_DATA_FLAGS(error, hook, m, NG_WAITOK);
+	NET_EPOCH_EXIT(et);
 
 release:
 	if (control != NULL)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202002050306.01536TFg031127>