On Wed, Aug 17, 2016 at 02:29:49PM +0200, Alexander Bluhm wrote: > On Wed, Aug 17, 2016 at 10:18:26PM +1000, David Gwynne wrote: > > the reason is that pools now keep track of things that are sleeping > > for memory and will give them an item BEFORE waking them up. > > previously i believe they were woken up to try and get an item, > > which could fail as you described because interrupt load could > > starve sleepers before the wakeup actually happens. > > > > mbufs and clusters are allocated out of pools, so they now inherit > > this behaviour. > > The commit message says: > > "userland process might hang if the system ran out of mbuf clusters" > > As I understand, we are hitting the global mbuf cluster limit. I > don't see how a changed pool wakeup policy could fix this hang.
And NetBSD has the same fix in rev 1.201 mentioning our commit. --- Wait for freeing mbuf cluster in sosend() causes freeze network stack. Don't wait for it. problem was found by iij seil team. it is similar to OpenBSD uipc_socket.c rev.1.72. --- http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/kern/uipc_socket.c.diff?r1=1.200&r2=1.201&f=h bluhm