• Cesar Eduardo Barros's avatar
    mm: do not call frontswap_init() during swapoff · 6555bc03
    Cesar Eduardo Barros authored
    The call to frontswap_init() was added within enable_swap_info(), which
    was called not only during sys_swapon, but also to reinsert the swap_info
    into the swap_list in case of failure of try_to_unuse() within
    sys_swapoff.  This means that frontswap_init() might be called more than
    once for the same swap area.
    
    While as far as I could see no frontswap implementation has any problem
    with it (and in fact, all the ones I found ignore the parameter passed to
    frontswap_init), this could change in the future.
    
    To prevent future problems, move the call to frontswap_init() to outside
    the code shared between sys_swapon and sys_swapoff.
    Signed-off-by: default avatarCesar Eduardo Barros <cesarb@cesarb.net>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Acked-by: default avatarDan 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>
    6555bc03
swapfile.c 63.2 KB