On Fri, Jun 28, 2019 at 09:39:01AM -0700, Dan Williams wrote: > On Fri, Jun 28, 2019 at 9:37 AM Matthew Wilcox <willy@xxxxxxxxxxxxx> wrote: > > 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. > > Can you explain to me one more time, yes I'm slow on the uptake on > this, the difference between xas_load() and xas_find_conflict() and > why it's ok for dax_lock_page() to use xas_load() while > grab_mapping_entry() uses xas_find_conflict()? When used with a non-zero 'order', xas_find_conflict() will return an entry whereas xas_load() might return a pointer to a node. dax_lock_page() always uses a zero order, so they would always do the same thing (xas_find_conflict() would be less efficient).