diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-09-11 13:49:55 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2014-09-23 11:10:12 -0700 |
commit | 4c521f493b625c7982cf2eae246e86c893f62dfa (patch) | |
tree | cb88bac09865787eb17fb7e98854e25906729717 /fs/f2fs/segment.h | |
parent | 60979115a69e0e7916a1c1796f902264f1350977 (diff) |
f2fs: use meta_inode cache to improve roll-forward speed
Previously, all the dnode pages should be read during the roll-forward recovery.
Even worsely, whole the chain was traversed twice.
This patch removes that redundant and costly read operations by using page cache
of meta_inode and readahead function as well.
Reviewed-by: Chao Yu <chao2.yu@samsung.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/segment.h')
-rw-r--r-- | fs/f2fs/segment.h | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h index 013aed2f3539..c6f37f2fe50e 100644 --- a/fs/f2fs/segment.h +++ b/fs/f2fs/segment.h @@ -87,6 +87,7 @@ (BITS_TO_LONGS(nr) * sizeof(unsigned long)) #define TOTAL_SEGS(sbi) (SM_I(sbi)->main_segments) #define TOTAL_SECS(sbi) (sbi->total_sections) +#define TOTAL_BLKS(sbi) (SM_I(sbi)->segment_count << sbi->log_blocks_per_seg) #define SECTOR_FROM_BLOCK(sbi, blk_addr) \ (((sector_t)blk_addr) << (sbi)->log_sectors_per_block) @@ -553,7 +554,7 @@ static inline void check_seg_range(struct f2fs_sb_info *sbi, unsigned int segno) static inline void verify_block_addr(struct f2fs_sb_info *sbi, block_t blk_addr) { struct f2fs_sm_info *sm_info = SM_I(sbi); - block_t total_blks = sm_info->segment_count << sbi->log_blocks_per_seg; + block_t total_blks = TOTAL_BLKS(sbi); block_t start_addr = sm_info->seg0_blkaddr; block_t end_addr = start_addr + total_blks - 1; BUG_ON(blk_addr < start_addr); @@ -606,7 +607,7 @@ static inline void check_seg_range(struct f2fs_sb_info *sbi, unsigned int segno) static inline void verify_block_addr(struct f2fs_sb_info *sbi, block_t blk_addr) { struct f2fs_sm_info *sm_info = SM_I(sbi); - block_t total_blks = sm_info->segment_count << sbi->log_blocks_per_seg; + block_t total_blks = TOTAL_BLKS(sbi); block_t start_addr = sm_info->seg0_blkaddr; block_t end_addr = start_addr + total_blks - 1; |