• S
    mm: refactor do_wp_page, extract the reuse case · 4e047f89
    Shachar Raindel 提交于
    Currently do_wp_page contains 265 code lines.  It also contains 9 goto
    statements, of which 5 are targeting labels which are not cleanup
    related.  This makes the function extremely difficult to understand.
    
    The following patches are an attempt at breaking the function to its
    basic components, and making it easier to understand.
    
    The patches are straight forward function extractions from do_wp_page.
    As we extract functions, we remove unneeded parameters and simplify the
    code as much as possible.  However, the functionality is supposed to
    remain completely unchanged.  The patches also attempt to document the
    functionality of each extracted function.  In patch 2, we split the
    unlock logic to the contain logic relevant to specific needs of each use
    case, instead of having huge number of conditional decisions in a single
    unlock flow.
    
    This patch (of 4):
    
    When do_wp_page is ending, in several cases it needs to reuse the existing
    page.  This is achieved by making the page table writable, and possibly
    updating the page-cache state.
    
    Currently, this logic was "called" by using a goto jump.  This makes
    following the control flow of the function harder.  It is also against the
    coding style guidelines for using goto.
    
    As the code can easily be refactored into a specialized function, refactor
    it out and simplify the code flow in do_wp_page.
    Acked-by: NLinus Torvalds <torvalds@linux-foundation.org>
    Acked-by: NKirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: NRik van Riel <riel@redhat.com>
    Acked-by: NAndi Kleen <ak@linux.intel.com>
    Acked-by: NHaggai Eran <haggaie@mellanox.com>
    Acked-by: NJohannes Weiner <hannes@cmpxchg.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Matthew Wilcox <matthew.r.wilcox@intel.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: Peter Feiner <pfeiner@google.com>
    Cc: Michel Lespinasse <walken@google.com>
    Reviewed-by: NMichal Hocko <mhocko@suse.cz>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    4e047f89
memory.c 101.3 KB