On Wed, Nov 26, 2014 at 02:00:06PM -0800, Andrew Morton wrote: > On Tue, 25 Nov 2014 14:48:41 -0500 Johannes Weiner <hannes@xxxxxxxxxxx> wrote: > > The > > same btw applies for the page_mkwrite case: how is mapping safe to > > pass to balance_dirty_pages() after unlocking page table and page? > > I'm not sure which code you're referring to here, but it's likely that > the switch-balancing-to-bdi approach will address that as well? This code in do_wp_page(): pte_unmap_unlock(page_table, ptl); [...] put_page(dirty_page); if (page_mkwrite) { struct address_space *mapping = dirty_page->mapping; set_page_dirty(dirty_page); unlock_page(dirty_page); page_cache_release(dirty_page); if (mapping) { /* * Some device drivers do not set page.mapping * but still dirty their pages */ balance_dirty_pages_ratelimited(mapping); } } And there is also this code in do_shared_fault(): pte_unmap_unlock(pte, ptl); if (set_page_dirty(fault_page)) dirtied = 1; mapping = fault_page->mapping; unlock_page(fault_page); if ((dirtied || vma->vm_ops->page_mkwrite) && mapping) { /* * Some device drivers do not set page.mapping but still * dirty their pages */ balance_dirty_pages_ratelimited(mapping); } I don't see anything that ensures mapping stays alive by the time it's passed to balance_dirty_pages() in either case. Argh, but of course there is. The mmap_sem. That pins the vma, which pins the file, which pins the inode. In all cases. So I think we can just stick with passing mapping to balance_dirty_pages() for now. -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html