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

Reply via email to