Came across a hungtask caused by huge number of rb tree traversing
during adding discard addrs in cp. This patch combine these consistence
checks and move it to discard thread.

Signed-off-by: Yunlei He <heyun...@huawei.com>
---
 fs/f2fs/segment.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index de31030..878ac90 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -918,8 +918,6 @@ static void __update_discard_tree_range(struct f2fs_sb_info 
*sbi,
                        prev_dc->di.len += di.len;
                        dcc->undiscard_blks += di.len;
                        __relocate_discard_cmd(dcc, prev_dc);
-                       f2fs_bug_on(sbi,
-                               !__check_rb_tree_consistence(sbi, &dcc->root));
                        di = prev_dc->di;
                        tdc = prev_dc;
                        merged = true;
@@ -935,16 +933,12 @@ static void __update_discard_tree_range(struct 
f2fs_sb_info *sbi,
                        __relocate_discard_cmd(dcc, next_dc);
                        if (tdc)
                                __remove_discard_cmd(sbi, tdc);
-                       f2fs_bug_on(sbi,
-                               !__check_rb_tree_consistence(sbi, &dcc->root));
                        merged = true;
                }
 
                if (!merged) {
                        __insert_discard_tree(sbi, bdev, di.lstart, di.start,
                                                        di.len, NULL, NULL);
-                       f2fs_bug_on(sbi,
-                               !__check_rb_tree_consistence(sbi, &dcc->root));
                }
  next:
                prev_dc = next_dc;
@@ -983,6 +977,8 @@ static void __issue_discard_cmd(struct f2fs_sb_info *sbi, 
bool issue_cond)
        int i, iter = 0;
 
        mutex_lock(&dcc->cmd_lock);
+       f2fs_bug_on(sbi,
+               !__check_rb_tree_consistence(sbi, &dcc->root));
        blk_start_plug(&plug);
        for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
                pend_list = &dcc->pend_list[i];
-- 
1.9.1


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to