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

Reply via email to