• Jaegeuk Kim's avatar
    f2fs: fix calculation of max. gc cost in the SSR case · b7250d2d
    Jaegeuk Kim authored
    In the SSR case, the max gc cost should be the number of pages in a segment.
    Otherwise, f2fs is able to fail getting dirty segments frequently for SSR.
    
    In get_victim_by_default() previously,
    
    while(1) {
       ...
       cost = get_gc_cost(); <- cost is between 0 ~ 512.
       ...
       if (cost == get_max_cost(sbi, &p)) <- max cost is UINT_MAX due to GC_CB type
    	continue;
    
       if (nsearched++ >= MAX_VICTIM_SEARCH)
    	break;
    }
    
    So, if there are a number of fully valid segments in series, f2fs cannot skip
    those segments by comparing the cost and max cost of each segment.
    
    Note that, the cost is the number of valid blocks at the time of the last
    checkpoint.
    Signed-off-by: default avatarJaegeuk Kim <jaegeuk.kim@samsung.com>
    b7250d2d
gc.c 16.7 KB