• Yunlong Song's avatar
    f2fs: avoid GC causing encrypted file corrupted · 9bf1a3f7
    Yunlong Song authored
    The encrypted file may be corrupted by GC in following case:
    
    Time 1: | segment 1 blkaddr = A |  GC -> | segment 2 blkaddr = B |
    Encrypted block 1 is moved from blkaddr A of segment 1 to blkaddr B of
    segment 2,
    
    Time 2: | segment 1 blkaddr = B |  GC -> | segment 3 blkaddr = C |
    
    Before page 1 is written back and if segment 2 become a victim, then
    page 1 is moved from blkaddr B of segment 2 to blkaddr Cof segment 3,
    during the GC process of Time 2, f2fs should wait for page 1 written back
    before reading it, or move_data_block will read a garbage block from
    blkaddr B since page is not written back to blkaddr B yet.
    
    Commit 6aa58d8a ("f2fs: readahead encrypted block during GC") introduce
    ra_data_block to read encrypted block, but it forgets to add
    f2fs_wait_on_page_writeback to avoid racing between GC and flush.
    Signed-off-by: default avatarYunlong Song <yunlong.song@huawei.com>
    Reviewed-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    9bf1a3f7
gc.c 32 KB