• Chao Yu's avatar
    f2fs: avoid race between zero_range and background GC · c7079853
    Chao Yu authored
    Thread A				Background GC
    - f2fs_zero_range
     - truncate_pagecache_range
    					- gc_data_segment
    					 - get_read_data_page
    					  - move_data_page
    					   - set_page_dirty
    					   - set_cold_data
     - f2fs_do_zero_range
      - dn->data_blkaddr = NEW_ADDR;
      - f2fs_set_data_blkaddr
    
    Actually, we don't need to set dirty & checked flag on the page, since
    all valid data in the page should be zeroed by zero_range().
    
    Use i_gc_rwsem[WRITE] to avoid such race condition.
    Signed-off-by: default avatarChao Yu <yuchao0@huawei.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    c7079853
file.c 71.8 KB