defrag.f2fs: enhance allocation speed
authorJaegeuk Kim <jaegeuk@kernel.org>
Thu, 17 Dec 2015 23:37:24 +0000 (15:37 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Sat, 19 Dec 2015 11:27:11 +0000 (03:27 -0800)
This patch improves the allocation speed.

Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fsck/f2fs.h
fsck/mount.c

index af5cc40..f990527 100644 (file)
@@ -295,7 +295,7 @@ static inline block_t __end_block_addr(struct f2fs_sb_info *sbi)
 #define GET_R2L_SEGNO(sbi, segno)      (segno + FREE_I_START_SEGNO(sbi))
 
 #define START_BLOCK(sbi, segno)        (SM_I(sbi)->main_blkaddr +              \
-       (segno << sbi->log_blocks_per_seg))
+       ((segno) << sbi->log_blocks_per_seg))
 
 static inline struct curseg_info *CURSEG_I(struct f2fs_sb_info *sbi, int type)
 {
index 4b38df8..79611e5 100644 (file)
@@ -1401,9 +1401,11 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type)
                se = get_seg_entry(sbi, segno);
 
                if (se->valid_blocks == sbi->blocks_per_seg ||
-                               IS_CUR_SEGNO(sbi, segno, type))
-                       goto next;
-
+                               IS_CUR_SEGNO(sbi, segno, type)) {
+                       *to = left ? START_BLOCK(sbi, segno) - 1:
+                                               START_BLOCK(sbi, segno + 1);
+                       continue;
+               }
                if (se->valid_blocks == 0 && !(segno % sbi->segs_per_sec)) {
                        struct seg_entry *se2;
                        int i;
@@ -1420,7 +1422,7 @@ int find_next_free_block(struct f2fs_sb_info *sbi, u64 *to, int left, int type)
                if (se->type == type &&
                        !f2fs_test_bit(offset, (const char *)se->cur_valid_map))
                        return 0;
-next:
+
                *to = left ? *to - 1: *to + 1;
        }
        return -1;