• Jaegeuk Kim's avatar
    f2fs: fix the potential mismatch between dir's i_size and i_blocks · 924a2ddb
    Jaegeuk Kim authored
    
    
    This is the erroneous scenario.
    
                                 i_size    on-disk i_size    i_blocks
    __f2fs_add_link()             4096           4096           2
     get_new_data_page            8192           4096           3
     -ENOSPC = init_inode_metadata
     checkpoint                     -            4096           3
     POR and reboot
    
    __f2fs_add_link()             4096           4096           3
     page = get_new_data_page (page->index = 1 by NEW_ADDR)
     add a dentry to the page successfully
    
    f2fs_rmdir()
     f2fs_empty_dir()             4096           4096           3
     f2fs_unlink() goes, since there is no valid dentry due to i_size = 4096.
     But, still there is one dentry in page->index = 1.
    
    So this patch moves the code to write dir->i_size into on-disk i_size in order
    to sync dir's i_size, on-disk i_size, and its i_blocks.
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
    924a2ddb
dir.c 16.4 KB