• Hugh Dickins's avatar
    tmpfs: make shmem_unuse more preemptible · cb5f7b9a
    Hugh Dickins authored
    shmem_unuse is at present an unbroken search through every swap vector page of
    every tmpfs file which might be swapped, all under shmem_swaplist_lock.  This
    dates from long ago, when the caller held mmlist_lock over it all too: long
    gone, but there's never been much pressure for preemptible swapoff.
    
    Make it a little more preemptible, replacing shmem_swaplist_lock by
    shmem_swaplist_mutex, inserting a cond_resched in the main loop, and a
    cond_resched_lock (on info->lock) at one convenient point in the
    shmem_unuse_inode loop, where it has no outstanding kmap_atomic.
    
    If we're serious about preemptible swapoff, there's much further to go e.g.
    I'm stupid to let the kmap_atomics of the decreasingly significant HIGHMEM
    case dictate preemptiblility for other configs.  But as in the earlier patch
    to make swapoff scan ptes preemptibly, my hidden agenda is really towards
    making memcgroups work, hardly about preemptibility at all.
    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>
    cb5f7b9a
shmem.c 63.7 KB