• Barry Song's avatar
    mm: fix swap_read_folio_zeromap() for large folios with partial zeromap · 9d57090e
    Barry Song authored
    Patch series "mm: enable large folios swap-in support", v9.
    
    Currently, we support mTHP swapout but not swapin.  This means that once
    mTHP is swapped out, it will come back as small folios when swapped in. 
    This is particularly detrimental for devices like Android, where more than
    half of the memory is in swap.
    
    The lack of mTHP swapin functionality makes mTHP a showstopper in
    scenarios that heavily rely on swap.  This patchset introduces mTHP
    swap-in support.  It starts with synchronous devices similar to zRAM,
    aiming to benefit as many users as possible with minimal changes.
    
    
    This patch (of 3):
    
    There could be a corner case where the first entry is non-zeromap, but a
    subsequent entry is zeromap.  In this case, we should not let
    swap_read_folio_zeromap() return false since we will still read corrupted
    data.
    
    Additionally, the iteration of test_bit() is unnecessary and can be
    replaced with bitmap operations, which are more efficient.
    
    We can adopt the style of swap_pte_batch() and folio_pte_batch() to
    introduce swap_zeromap_batch() which seems to provide the greatest
    flexibility for the caller.  This approach allows the caller to either
    check if the zeromap status of all entries is consistent or determine the
    number of contiguous entries with the same status.
    
    Since swap_read_folio() can't handle reading a large folio that's
    partially zeromap and partially non-zeromap, we've moved the code to
    mm/swap.h so that others, like those working on swap-in, can access it.
    
    Link: https://lkml.kernel.org/r/20240908232119.2157-1-21cnbao@gmail.com
    Link: https://lkml.kernel.org/r/20240908232119.2157-2-21cnbao@gmail.com
    Fixes: 0ca0c24e ("mm: store zero pages to be swapped out in a bitmap")
    Signed-off-by: default avatarBarry Song <v-songbaohua@oppo.com>
    Reviewed-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Reviewed-by: default avatarUsama Arif <usamaarif642@gmail.com>
    Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
    Cc: Chris Li <chrisl@kernel.org>
    Cc: Christoph Hellwig <hch@infradead.org>
    Cc: Chuanhua Han <hanchuanhua@oppo.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Gao Xiang <xiang@kernel.org>
    Cc: Huang Ying <ying.huang@intel.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Kairui Song <kasong@tencent.com>
    Cc: Kairui Song <ryncsn@gmail.com>
    Cc: Kalesh Singh <kaleshsingh@google.com>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Minchan Kim <minchan@kernel.org>
    Cc: Nhat Pham <nphamcs@gmail.com>
    Cc: Ryan Roberts <ryan.roberts@arm.com>
    Cc: Sergey Senozhatsky <senozhatsky@chromium.org>
    Cc: Shakeel Butt <shakeel.butt@linux.dev>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Yang Shi <shy828301@gmail.com>
    Cc: Kanchana P Sridhar <kanchana.p.sridhar@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    9d57090e
page_io.c 16.3 KB