• Gao Xiang's avatar
    erofs: fix small compressed files inlining · 24331050
    Gao Xiang authored
    Prior to ztailpacking feature, it's enough that each lcluster has
    two pclusters at most, and the last pcluster should be turned into
    an uncompressed pcluster when necessary. For example,
      _________________________________________________
     |_ pcluster n-2 _|_ pcluster n-1 _|____ EOFed ____|
    
    which should be converted into:
      _________________________________________________
     |_ pcluster n-2 _|_ pcluster n-1 (uncompressed)' _|
    
    That is fine since either pcluster n-1 or (uncompressed)' takes one
    physical block.
    
    However, after ztailpacking was supported, the game is changed since
    the last pcluster can be inlined now. And such case above is quite
    common for inlining small files. Therefore, in order to inline more
    effectively, special EOF lclusters are now supported which can have
    three parts at most, as illustrated below:
      _________________________________________________
     |_ pcluster n-2 _|_ pcluster n-1 _|____ EOFed ____|
                                       ^ i_size
    
    Actually similar code exists in Yue Hu's original patchset [1], but I
    removed this part on purpose. After evaluating more real cases with
    small files, I've changed my mind.
    
    [1] https://lore.kernel.org/r/20211215094449.15162-1-huyue2@yulong.com
    
    Link: https://lore.kernel.org/r/20220203190203.30794-1-xiang@kernel.org
    Fixes: ab92184f ("erofs: add on-disk compressed tail-packing inline support")
    Reviewed-by: default avatarChao Yu <chao@kernel.org>
    Signed-off-by: default avatarGao Xiang <hsiangkao@linux.alibaba.com>
    24331050
zmap.c 20.9 KB