• Gao Xiang's avatar
    erofs: introduce bufvec to store decompressed buffers · 06a304cd
    Gao Xiang authored
    For each pcluster, the total compressed buffers are determined in
    advance, yet the number of decompressed buffers actually vary.  Too
    many decompressed pages can be recorded if one pcluster is highly
    compressed or its pcluster size is large.  That takes extra memory
    footprints compared to uncompressed filesystems, especially a lot of
    I/O in flight on low-ended devices.
    
    Therefore, similar to inplace I/O, pagevec was introduced to reuse
    page cache to store these pointers in the time-sharing way since
    these pages are actually unused before decompressing.
    
    In order to make it more flexable, a cleaner bufvec is used to
    replace the old pagevec stuffs so that
    
     - Decompressed offsets can be stored inline, thus it can be used
       for the upcoming feature like compressed data deduplication.
       It's calculated by `page_offset(page) - map->m_la';
    
     - Towards supporting large folios for compressed inodes since
       our final goal is to completely avoid page->private but use
       folio->private only for all page cache pages.
    Acked-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    Link: https://lore.kernel.org/r/20220715154203.48093-5-hsiangkao@linux.alibaba.com
    06a304cd
zdata.c 41.9 KB