• Hugh Dickins's avatar
    mm: invalidation check mapping before folio_contains · aa5b9178
    Hugh Dickins authored
    Enabling tmpfs "direct IO" exposes it to invalidate_inode_pages2_range(),
    which when swapping can hit the VM_BUG_ON_FOLIO(!folio_contains()): the
    folio has been moved from page cache to swap cache (with folio->mapping
    reset to NULL), but the folio_index() embedded in folio_contains() sees
    swapcache, and so returns the swapcache_index() - whereas folio->index
    would be the right one to check against the index from mapping's xarray.
    
    There are different ways to fix this, but my preference is just to order
    the checks in invalidate_inode_pages2_range() the same way that they are
    in __filemap_get_folio() and find_lock_entries() and filemap_fault():
    check folio->mapping before folio_contains().
    Signed-off-by: default avatarHugh Dickins <hughd@google.com>
    Reviewed-by: default avatarJan Kara <jack@suse.cz>
    Message-Id: <f0b31772-78d7-f198-6482-9f25aab8c13f@google.com>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    aa5b9178
truncate.c 25.9 KB