• Chao Yu's avatar
    f2fs: flush dirty nat entries when exceeding threshold · 7d768d2c
    Chao Yu authored
    When testing f2fs with xfstest, generic/251 is stuck for long time,
    the case uses below serials to obtain fresh released space in device,
    in order to prepare for following fstrim test.
    
    1. rm -rf /mnt/dir
    2. mkdir /mnt/dir/
    3. cp -axT `pwd`/ /mnt/dir/
    4. goto 1
    
    During preparing step, all nat entries will be cached in nat cache,
    most of them are dirty entries with invalid blkaddr, which means
    nodes related to these entries have been truncated, and they could
    be reused after the dirty entries been checkpointed.
    
    However, there was no checkpoint been triggered, so nid allocators
    (e.g. mkdir, creat) will run into long journey of iterating all NAT
    pages, looking for free nids in alloc_nid->build_free_nids.
    
    Here, in f2fs_balance_fs_bg we give another chance to do checkpoint
    to flush nat entries for reusing them in free nid cache when dirty
    entry count exceeds 10% of max count.
    Signed-off-by: default avatarChao Yu <chao2.yu@samsung.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    7d768d2c
segment.c 61.7 KB