• Hugh Dickins's avatar
    tmpfs: allow filepage alongside swappage · d9fe526a
    Hugh Dickins authored
    tmpfs has long allowed for a fresh filepage to be created in pagecache, just
    before shmem_getpage gets the chance to match it up with the swappage which
    already belongs to that offset.  But unionfs_writepage now does a
    find_or_create_page, divorced from shmem_getpage, which leaves conflicting
    filepage and swappage outstanding indefinitely, when unionfs is over tmpfs.
    
    Therefore shmem_writepage (where a page is swizzled from file to swap) must
    now be on the lookout for existing swap, ready to free it in favour of the
    more uptodate filepage, instead of BUGging on that clash.  And when the
    add_to_page_cache fails in shmem_unuse_inode, it must defer to an uptodate
    filepage, otherwise swapoff would hang.  Whereas when add_to_page_cache fails
    in shmem_getpage, it should retry in the same way it already does.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d9fe526a
shmem.c 63.1 KB