• Cesar Eduardo Barros's avatar
    mm: refactor reinsert of swap_info in sys_swapoff() · cf0cac0a
    Cesar Eduardo Barros authored
    The block within sys_swapoff() which re-inserts the swap_info into the
    swap_list in case of failure of try_to_unuse() reads a few values outside
    the swap_lock.  While this is safe at that point, it is subtle code.
    
    Simplify the code by moving the reading of these values to a separate
    function, refactoring it a bit so they are read from within the swap_lock.
     This is easier to understand, and matches better the way it worked before
    I unified the insertion of the swap_info from both sys_swapon and
    sys_swapoff.
    
    This change should make no functional difference.  The only real change is
    moving the read of two or three structure fields to within the lock
    (frontswap_map_get() is nothing more than a read of p->frontswap_map).
    Signed-off-by: default avatarCesar Eduardo Barros <cesarb@cesarb.net>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Dan Magenheimer <dan.magenheimer@oracle.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Hugh Dickins <hughd@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    cf0cac0a
swapfile.c 63.2 KB