• Yosry Ahmed's avatar
    mm: zswap: add zswap_never_enabled() · 2d4d2b1c
    Yosry Ahmed authored
    Add zswap_never_enabled() to skip the xarray lookup in zswap_load() if
    zswap was never enabled on the system.  It is implemented using static
    branches for efficiency, as enabling zswap should be a rare event.  This
    could shave some cycles off zswap_load() when CONFIG_ZSWAP is used but
    zswap is never enabled.
    
    However, the real motivation behind this patch is two-fold:
    - Incoming large folio swapin work will need to fallback to order-0
      folios if zswap was ever enabled, because any part of the folio could be
      in zswap, until proper handling of large folios with zswap is added.
    
    - A warning and recovery attempt will be added in a following change in
      case the above was not done incorrectly.  Zswap will fail the read if
      the folio is large and it was ever enabled.
    
    Expose zswap_never_enabled() in the header for the swapin work to use
    it later.
    
    [yosryahmed@google.com: expose zswap_never_enabled() in the header]
      Link: https://lkml.kernel.org/r/Zmjf0Dr8s9xSW41X@google.com
    Link: https://lkml.kernel.org/r/20240611024516.1375191-2-yosryahmed@google.comSigned-off-by: default avatarYosry Ahmed <yosryahmed@google.com>
    Reviewed-by: default avatarNhat Pham <nphamcs@gmail.com>
    Cc: Barry Song <baohua@kernel.org>
    Cc: Chengming Zhou <chengming.zhou@linux.dev>
    Cc: Chris Li <chrisl@kernel.org>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    2d4d2b1c
zswap.c 48.7 KB