Jason Gunthorpe wrote: > On Thu, Sep 08, 2022 at 12:27:06PM -0700, Dan Williams wrote: > > flag lets the fsdax core track when it has already dropped a page > > reference, but still has use for things like memory-failure to > > opportunistically use page->mapping on a 0-reference page. > > This is not straightforward, as discussed before the page->mapping is > allowed to change while the refcount is zero, so there is no generic > way to safely obtain a pointer to the address space from a 0 reference > page. Agree. > > You'd have to pass the 0 reference page into a new pgmap operation > which could obtain an appropriate internal lock to read page->mapping. Correct, that's what the memory-failure code does via dax_lock_page(). It pins the pgmap, freezes page->mapping associations via rcu_read_lock(), speculatively reads page->mapping, takes the Xarray lock, revalidates page->mapping is the one we read speculatively, and then finally locks the entry in place until the memory-failure handling completes.