On Thu, Jun 27, 2019 at 07:39:37PM -0700, Dan Williams wrote:
On Thu, Jun 27, 2019 at 12:59 PM Matthew Wilcox
> On Thu, Jun 27, 2019 at 12:09:29PM -0700, Dan Williams wrote:
> > > This bug feels like we failed to unlock, or unlocked the wrong entry
> > > and this hunk in the bisected commit looks suspect to me. Why do we
> > > still need to drop the lock now that the radix_tree_preload() calls
> > > are gone?
> > Nevermind, unmapp_mapping_pages() takes a sleeping lock, but then I
> > wonder why we don't restart the lookup like the old implementation.
> If something can remove a locked entry, then that would seem like the
> real bug. Might be worth inserting a lookup there to make sure that it
> hasn't happened, I suppose?
Nope, added a check, we do in fact get the same locked entry back
after dropping the lock.
Okay, good, glad to have ruled that out.
The deadlock revolves around the mmap_sem. One thread holds it for
read and then gets stuck indefinitely in get_unlocked_entry(). Once
that happens another rocksdb thread tries to mmap and gets stuck
trying to take the mmap_sem for write. Then all new readers, including
ps and top that try to access a remote vma, then get queued behind
It could also be the case that we're missing a wake up.
That was the conclusion I came to; that one thread holding the mmap sem
for read isn't being woken up when it should be. Just need to find it ...
obviously it's something to do with the PMD entries.