With the change in rev. 1.99 of subr_pool() changing the limit
will no longer set the high watermark as well.
This causes i386 to stop forwading packets on very busy systems because
the pool thread is not fast enough to replenish the pool. So reintroduce
the pool_sethiwat() in this particular case as a workaround.
--
:wq Claudio
Index: uipc_mbuf.c
===================================================================
RCS file: /cvs/src/sys/kern/uipc_mbuf.c,v
retrieving revision 1.147
diff -u -p -r1.147 uipc_mbuf.c
--- uipc_mbuf.c 5 Nov 2010 15:17:50 -0000 1.147
+++ uipc_mbuf.c 20 Dec 2010 14:58:54 -0000
@@ -166,6 +166,14 @@ nmbclust_update(void)
for (i = 0; i < nitems(mclsizes); i++) {
(void)pool_sethardlimit(&mclpools[i], nmbclust,
mclpool_warnmsg, 60);
+ /*
+ * XXX this needs to be reconsidered.
+ * Setting the high water mark to nmbclust is too high
+ * but we need to have enough spare buffers around so that
+ * allocations in interrupt context don't fail or mclgeti()
+ * drivers may end up with empty rings.
+ */
+ pool_sethiwat(&mclpools[i], nmbclust);
}
pool_sethiwat(&mbpool, nmbclust);
}