aboutsummaryrefslogtreecommitdiffstats
path: root/fsck
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2015-12-17 15:37:24 -0800
committerSteve Kondik <steve@cyngn.com>2016-08-24 11:43:29 -0700
commit21a5ffd8f89052cc5e67260f2e411282f1212d9e (patch)
tree70ec21024d07a72724fad266404a49f0177e740d /fsck
parentb3e9e96cc18fae60b885a0ceb21bd1c4e42c981a (diff)
downloadandroid_external_f2fs-tools-21a5ffd8f89052cc5e67260f2e411282f1212d9e.tar.gz
android_external_f2fs-tools-21a5ffd8f89052cc5e67260f2e411282f1212d9e.tar.bz2
android_external_f2fs-tools-21a5ffd8f89052cc5e67260f2e411282f1212d9e.zip
defrag.f2fs: enhance allocation speed
This patch improves the allocation speed. Change-Id: I524e5f12e1c2937997374316462a84a159b2e1d8 Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fsck')
-rw-r--r--fsck/f2fs.h2
-rw-r--r--fsck/mount.c10
2 files changed, 7 insertions, 5 deletions
diff --git a/fsck/f2fs.h b/fsck/f2fs.h
index ad9b13b..651b62d 100644
--- a/fsck/f2fs.h
+++ b/fsck/f2fs.h
@@ -297,7 +297,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)
{
diff --git a/fsck/mount.c b/fsck/mount.c
index 4b38df8..79611e5 100644
--- a/fsck/mount.c
+++ b/fsck/mount.c
@@ -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;