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)
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to