• C
    f2fs: reorganize f2fs_map_blocks · 973163fc
    Chao Yu 提交于
    In this patch, we try to reorganize f2fs_map_blocks to make block mapping
    flow more clear by using following structure:
    
    /* check status of mapping */
    
    if (unmapped) {
    	/* blkaddr == NULL_ADDR || blkaddr == NEW_ADDR */
    
    	if (create) {
    		/* write path, handle dio write case here */
    		alloc_and_map;
    	} else {
    		/*
    		 * handle read cases from all call paths:
    		 *     1. generic read;
    		 *     2. dio read;
    		 *     3. fiemap;
    		 *     4. bmap
    		 */
    	}
    }
    
    /* map buffer_header */
    
    Besides, this patch handles the missing case correctly for dio write:
    When we fail in __allocate_data_blocks, then in f2fs_map_blocks, we will
    not allocate blocks correctly for preallocated blocks, but returning with
    an unmapped buffer head, which will result in failure of dio write.
    Signed-off-by: NChao Yu <chao2.yu@samsung.com>
    Signed-off-by: NJaegeuk Kim <jaegeuk@kernel.org>
    973163fc
data.c 38.3 KB