Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 3 Feb 2020 20:48:57 +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: r357466 - head/sys/kern
Message-ID:  <202002032048.013Kmv5Z022016@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: glebius
Date: Mon Feb  3 20:48:57 2020
New Revision: 357466
URL: https://svnweb.freebsd.org/changeset/base/357466

Log:
  Couple protocol drain routines (frag6_drain and sctp_drain) may send
  packets.  An unexpected behaviour for memory reclamation routine.
  Anyway, we need enter the network epoch for doing that.

Modified:
  head/sys/kern/kern_mbuf.c

Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c	Mon Feb  3 20:46:31 2020	(r357465)
+++ head/sys/kern/kern_mbuf.c	Mon Feb  3 20:48:57 2020	(r357466)
@@ -829,15 +829,18 @@ mb_ctor_pack(void *mem, int size, void *arg, int how)
 static void
 mb_reclaim(uma_zone_t zone __unused, int pending __unused)
 {
+	struct epoch_tracker et;
 	struct domain *dp;
 	struct protosw *pr;
 
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK | WARN_PANIC, NULL, __func__);
 
+	NET_EPOCH_ENTER(et);
 	for (dp = domains; dp != NULL; dp = dp->dom_next)
 		for (pr = dp->dom_protosw; pr < dp->dom_protoswNPROTOSW; pr++)
 			if (pr->pr_drain != NULL)
 				(*pr->pr_drain)();
+	NET_EPOCH_EXIT(et);
 }
 
 /*



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