aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2017-09-09 14:11:04 -0400
committerJaegeuk Kim <jaegeuk@kernel.org>2017-09-11 20:22:18 -0400
commitb3a97a2a9a7b2d50bcf13d32857cd6f5695c6b65 (patch)
treed95e581f355bde321e2e05e4f6188ab8b596b555
parent1eb1ef4a8e9f6a4d9c2c7a645aba21d2f8719728 (diff)
f2fs: speed up gc_urgent mode with SSR
This patch activates SSR in gc_urgent mode. Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fs/f2fs/f2fs.h1
-rw-r--r--fs/f2fs/segment.c15
-rw-r--r--fs/f2fs/segment.h13
3 files changed, 16 insertions, 13 deletions
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index c0803b1873b3..9a7c90386947 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -2511,6 +2511,7 @@ void destroy_node_manager_caches(void);
2511/* 2511/*
2512 * segment.c 2512 * segment.c
2513 */ 2513 */
2514bool need_SSR(struct f2fs_sb_info *sbi);
2514void register_inmem_page(struct inode *inode, struct page *page); 2515void register_inmem_page(struct inode *inode, struct page *page);
2515void drop_inmem_pages(struct inode *inode); 2516void drop_inmem_pages(struct inode *inode);
2516void drop_inmem_page(struct inode *inode, struct page *page); 2517void drop_inmem_page(struct inode *inode, struct page *page);
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 273cc645e502..7fd742f747ce 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -169,6 +169,21 @@ found:
169 return result - size + __reverse_ffz(tmp); 169 return result - size + __reverse_ffz(tmp);
170} 170}
171 171
172bool need_SSR(struct f2fs_sb_info *sbi)
173{
174 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
175 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
176 int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
177
178 if (test_opt(sbi, LFS))
179 return false;
180 if (sbi->gc_thread && sbi->gc_thread->gc_urgent)
181 return true;
182
183 return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
184 2 * reserved_sections(sbi));
185}
186
172void register_inmem_page(struct inode *inode, struct page *page) 187void register_inmem_page(struct inode *inode, struct page *page)
173{ 188{
174 struct f2fs_inode_info *fi = F2FS_I(inode); 189 struct f2fs_inode_info *fi = F2FS_I(inode);
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 613b2fa7b1c1..e0a6cc23ace3 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -497,19 +497,6 @@ static inline int reserved_sections(struct f2fs_sb_info *sbi)
497 return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi)); 497 return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi));
498} 498}
499 499
500static inline bool need_SSR(struct f2fs_sb_info *sbi)
501{
502 int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
503 int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
504 int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
505
506 if (test_opt(sbi, LFS))
507 return false;
508
509 return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
510 2 * reserved_sections(sbi));
511}
512
513static inline bool has_not_enough_free_secs(struct f2fs_sb_info *sbi, 500static inline bool has_not_enough_free_secs(struct f2fs_sb_info *sbi,
514 int freed, int needed) 501 int freed, int needed)
515{ 502{