On Mon, Dec 5, 2016 at 11:11 AM, Vegard Nossum wrote: > > ------------[ cut here ]------------ > WARNING: CPU: 22 PID: 14012 at mm/shmem.c:2668 shmem_fallocate+0x9a7/0xac0 Ok, good. So that's confirmed as the cause of this problem. And the call chain that I wanted is obviously completely uninteresting, because it's call cghain on the other side (the page fault side) that would show the nested wake queue behavior. I was just being stupid about it. I wonder if we have any other places where we just blithely assume that "wake_up_all()" will actually empty the whole wait queue. It's _usually_ true, but as noted, nested waiting does happen. Anyway, can you try this patch instead? It should actually cause the wake_up_all() to always remove all entries, and thus the WARN_ON() should no longer happen (and I removed the "list_del()" hackery). Linus