• Jaegeuk Kim's avatar
    f2fs: avoid data race when deciding checkpoin in f2fs_sync_file · dd11a5df
    Jaegeuk Kim authored
    When fs utilization is almost full, f2fs_sync_file should do checkpoint if
    there is not enough space for roll-forward later. (i.e. space_for_roll_forward)
    So, currently we have no lock for sbi->alloc_valid_block_count, resulting in
    race condition.
    
    In rare case, we can get -ENOSPC when doing roll-forward which triggers
    
    	if (is_valid_blkaddr(sbi, dest, META_POR)) {
    		if (src == NULL_ADDR) {
    			err = reserve_new_block(&dn);
    			f2fs_bug_on(sbi, err);
    			...
    		}
    		...
    	}
    in do_recover_data.
    
    So, this patch avoids that situation in advance.
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    dd11a5df
f2fs.h 73.3 KB