• Vitaly Wool's avatar
    mm/z3fold.c: introduce helper functions · 9050cce1
    Vitaly Wool authored
    Patch series "z3fold: support page migration", v2.
    
    This patchset implements page migration support and slightly better buddy
    search.  To implement page migration support, z3fold has to move away from
    the current scheme of handle encoding.  i.  e.  stop encoding page address
    in handles.  Instead, a small per-page structure is created which will
    contain actual addresses for z3fold objects, while pointers to fields of
    that structure will be used as handles.
    
    Thus, it will be possible to change the underlying addresses to reflect
    page migration.
    
    To support migration itself, 3 callbacks will be implemented:
    
    1: isolation callback: z3fold_page_isolate(): try to isolate the page
       by removing it from all lists.  Pages scheduled for some activity and
       mapped pages will not be isolated.  Return true if isolation was
       successful or false otherwise
    
    2: migration callback: z3fold_page_migrate(): re-check critical
       conditions and migrate page contents to the new page provided by the
       system.  Returns 0 on success or negative error code otherwise
    
    3: putback callback: z3fold_page_putback(): put back the page if
       z3fold_page_migrate() for it failed permanently (i.  e.  not with
       -EAGAIN code).
    
    To make sure an isolated page doesn't get freed, its kref is incremented
    in z3fold_page_isolate() and decremented during post-migration compaction,
    if migration was successful, or by z3fold_page_putback() in the other
    case.
    
    Since the new handle encoding scheme implies slight memory consumption
    increase, better buddy search (which decreases memory consumption) is
    included in this patchset.
    
    This patch (of 4):
    
    Introduce a separate helper function for object allocation, as well as 2
    smaller helpers to add a buddy to the list and to get a pointer to the
    pool from the z3fold header.  No functional changes here.
    
    Link: http://lkml.kernel.org/r/20190417103633.a4bb770b5bf0fb7e43ce1666@gmail.comSigned-off-by: default avatarVitaly Wool <vitaly.vul@sony.com>
    Cc: Dan Streetman <ddstreet@ieee.org>
    Cc: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
    Cc: Krzysztof Kozlowski <k.kozlowski@samsung.com>
    Cc: Oleksiy Avramchenko <oleksiy.avramchenko@sonymobile.com>
    Cc: Uladzislau Rezki <urezki@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    9050cce1
z3fold.c 30.9 KB