• Hugh Dickins's avatar
    mm: fix ever-decreasing swap priority · 78ecba08
    Hugh Dickins authored
    Vegard Nossum has noticed the ever-decreasing negative priority in a
    swapon /swapoff loop, which eventually would misprioritize when int wraps
    positive.  Not worth spending much code on, but probably better fixed.
    
    It's easy to handle the swapping on and off of just one area, but there's
    not much point if a pair or more still misbehave.  To handle the general
    case, swapoff should compact negative priorities, keeping them always from
    -1 to -MAX_SWAPFILES.  That's a change, but should cause no regression,
    since these negative (unspecified) priorities are disjoint from the the
    positive specified priorities 0 to 32767.
    
    One small functional difference, which seems appropriate: when swapoff
    fails to free all swap from a negative priority area, that area is now
    reinserted at lowest priority, rather than at its original priority.
    
    In moving down swapon's setting of priority, I notice that an area is
    visible to /proc/swaps when it has swap_map set, yet that was being set
    before all the visible fields were properly filled in: corrected.
    Signed-off-by: default avatarHugh Dickins <hugh@veritas.com>
    Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Reported-by: default avatarVegard Nossum <vegard.nossum@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    78ecba08
swapfile.c 45.3 KB