• Jaegeuk Kim's avatar
    f2fs: fix tracking parent inode number · 6666e6aa
    Jaegeuk Kim authored
    Previously, f2fs didn't track the parent inode number correctly which is stored
    in each f2fs_inode. In the case of the following scenario, a bug can be occured.
    
    Let's suppose there are one directory, "/b", and two files, "/a" and "/b/a".
     - pino of "/a" is ROOT_INO.
     - pino of "/b/a" is DIR_B_INO.
    
    Then,
     # sync
      : The inode pages of "/a" and "/b/a" contain the parent inode numbers as
        ROOT_INO and DIR_B_INO respectively.
     # mv /a /b/a
      : The parent inode number of "/a" should be changed to DIR_B_INO, but f2fs
        didn't do that. Ref. f2fs_set_link().
    
    In order to fix this clearly, I added i_pino in f2fs_inode_info, and whenever
    it needs to be changed like in f2fs_add_link() and f2fs_set_link(), it is
    updated temporarily in f2fs_inode_info.
    
    And later, f2fs_write_inode() stores the latest information to the inode pages.
    For power-off-recovery, f2fs_sync_file() triggers simply f2fs_write_inode().
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
    6666e6aa
dir.c 16.4 KB