• Huang Ying's avatar
    f2fs: avoid node page to be written twice in gc_node_segment · 9a01b56b
    Huang Ying authored
    In gc_node_segment, if node page gc is run concurrently with node page
    writeback, and check_valid_map and get_node_page run after page locked
    and before cur_valid_map is updated as below, it is possible for the
    page to be written twice unnecessarily.
    
    			sync_node_pages
    			  try_lock_page
    			  ...
    check_valid_map		  f2fs_write_node_page
    			    ...
    			    write_node_page
    			      do_write_page
    			        allocate_data_block
    				  ...
    				  refresh_sit_entry /* update cur_valid_map */
    				  ...
    			    ...
    			    unlock_page
    get_node_page
    ...
    set_page_dirty
    ...
    f2fs_put_page
      unlock_page
    
    This can be solved via calling check_valid_map after get_node_page again.
    Signed-off-by: default avatarHuang, Ying <ying.huang@intel.com>
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk@kernel.org>
    9a01b56b
gc.c 18.1 KB