git: 67be955f6bd5 - main - netgraph/ng_ksocket: Enter epoch on NG_SEND_DATA_ONLY
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 10 Oct 2026 19:14:05 UTC
The branch main has been updated by pouria:
URL: https://cgit.FreeBSD.org/src/commit/?id=67be955f6bd5d5b51fdee407969d1a7cde156f65
commit 67be955f6bd5d5b51fdee407969d1a7cde156f65
Author: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
AuthorDate: 2026-10-10 15:51:58 +0000
Commit: Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
CommitDate: 2026-10-10 19:12:35 +0000
netgraph/ng_ksocket: Enter epoch on NG_SEND_DATA_ONLY
The work queued by ng_send_fn() is intentionally processed
outside of the epoch in ngthread().
It is ng_ksocket's responsibility to enter epoch if it decides
to send data from such work.
Reviewed by: glebius
Fixes: 104827151e2a ("ng_iface: don't recursively enter epoch ...")
Differential Revision: https://reviews.freebsd.org/D60589
---
sys/netgraph/ng_ksocket.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
index bb5d56eabb86..0ed9da97adcd 100644
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -51,6 +51,7 @@
#include <sys/kernel.h>
#include <sys/mbuf.h>
#include <sys/proc.h>
+#include <sys/epoch.h>
#include <sys/malloc.h>
#include <sys/ctype.h>
#include <sys/protosw.h>
@@ -1119,6 +1120,7 @@ ng_ksocket_incoming(struct socket *so, void *arg, int waitflag)
static void
ng_ksocket_incoming2(node_p node, hook_p hook, void *arg1, int arg2)
{
+ struct epoch_tracker et;
struct socket *so = arg1;
const priv_p priv = NG_NODE_PRIVATE(node);
struct ng_mesg *response;
@@ -1231,7 +1233,9 @@ ng_ksocket_incoming2(node_p node, hook_p hook, void *arg1, int arg2)
}
sendit: /* Forward data with optional peer sockaddr as packet tag */
+ NET_EPOCH_ENTER(et);
NG_SEND_DATA_ONLY(error, priv->hook, m);
+ NET_EPOCH_EXIT(et);
}
/*
@@ -1243,8 +1247,11 @@ sendit: /* Forward data with optional peer sockaddr as packet tag */
struct mbuf *m;
m = m_gethdr(M_NOWAIT, MT_DATA);
- if (m != NULL)
+ if (m != NULL) {
+ NET_EPOCH_ENTER(et);
NG_SEND_DATA_ONLY(error, priv->hook, m);
+ NET_EPOCH_EXIT(et);
+ }
priv->flags |= KSF_EOFSEEN;
}
}