aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/checkpoint.c
diff options
context:
space:
mode:
authorChao Yu <chao2.yu@samsung.com>2014-12-08 02:02:52 -0500
committerJaegeuk Kim <jaegeuk@kernel.org>2014-12-08 17:19:09 -0500
commit635aee1fefef921ae4124b127fced62ea6008839 (patch)
tree92559fbad6271bbb0db0c7047b0e6bb370a9f1bc /fs/f2fs/checkpoint.c
parent66b00c186764e29765e8962a03556c329dee48e5 (diff)
f2fs: avoid to ra unneeded blocks in recover flow
To improve recovery speed, f2fs try to readahead many contiguous blocks in warm node segment, but for most time, abnormal power-off do not occur frequently, so when mount a normal power-off f2fs image, by contrary ra so many blocks and then invalid them will hurt the performance of mount. It's better to just ra the first next-block for normal condition. Signed-off-by: Chao Yu <chao2.yu@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Diffstat (limited to 'fs/f2fs/checkpoint.c')
-rw-r--r--fs/f2fs/checkpoint.c29
1 files changed, 14 insertions, 15 deletions
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index b2d5431d6850..e6c271fefaca 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -72,21 +72,6 @@ out:
72 return page; 72 return page;
73} 73}
74 74
75struct page *get_meta_page_ra(struct f2fs_sb_info *sbi, pgoff_t index)
76{
77 bool readahead = false;
78 struct page *page;
79
80 page = find_get_page(META_MAPPING(sbi), index);
81 if (!page || (page && !PageUptodate(page)))
82 readahead = true;
83 f2fs_put_page(page, 0);
84
85 if (readahead)
86 ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR);
87 return get_meta_page(sbi, index);
88}
89
90static inline bool is_valid_blkaddr(struct f2fs_sb_info *sbi, 75static inline bool is_valid_blkaddr(struct f2fs_sb_info *sbi,
91 block_t blkaddr, int type) 76 block_t blkaddr, int type)
92{ 77{
@@ -181,6 +166,20 @@ out:
181 return blkno - start; 166 return blkno - start;
182} 167}
183 168
169void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
170{
171 struct page *page;
172 bool readahead = false;
173
174 page = find_get_page(META_MAPPING(sbi), index);
175 if (!page || (page && !PageUptodate(page)))
176 readahead = true;
177 f2fs_put_page(page, 0);
178
179 if (readahead)
180 ra_meta_pages(sbi, index, MAX_BIO_BLOCKS(sbi), META_POR);
181}
182
184static int f2fs_write_meta_page(struct page *page, 183static int f2fs_write_meta_page(struct page *page,
185 struct writeback_control *wbc) 184 struct writeback_control *wbc)
186{ 185{