On 2017/5/15 18:01, Yunlei He wrote: > 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.
Need to remove all __check_rb_tree_consistence in __update_discard_tree_range. Thanks, > > 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]; > ------------------------------------------------------------------------------ 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