From 3d44f9b49e66acaa3fc3533efd236502c6ceb72a Mon Sep 17 00:00:00 2001 From: Jaegeuk Kim Date: Fri, 24 Mar 2023 10:09:28 -0700 Subject: [PATCH] FROMGIT: f2fs v2: factor out discard_cmd usage from general rb_tree use I found a bug in the previous version and this patch fixes the gap from upstream version. Fixes: fcc385fd44a0 ("FROMGIT: f2fs: factor out discard_cmd usage from general rb_tree use") Signed-off-by: Jaegeuk Kim (cherry picked from commit e39836183be8 https: //git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git dev) Change-Id: I4dbfb9f1f2cc956685a7c4de5fcfbba705c30cfb --- fs/f2fs/segment.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index d45243bb13c8..6aa1bf075b17 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -1395,6 +1395,7 @@ static void __update_discard_tree_range(struct f2fs_sb_info *sbi, while (1) { struct rb_node *node; + bool merged = false; struct discard_cmd *tdc = NULL; if (prev_dc) { @@ -1423,7 +1424,7 @@ static void __update_discard_tree_range(struct f2fs_sb_info *sbi, __relocate_discard_cmd(dcc, prev_dc); di = prev_dc->di; tdc = prev_dc; - goto next; + merged = true; } if (next_dc && next_dc->state == D_PREP && @@ -1437,10 +1438,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); - goto next; + merged = true; } - __insert_discard_cmd(sbi, bdev, di.lstart, di.start, di.len); + if (!merged) + __insert_discard_cmd(sbi, bdev, + di.lstart, di.start, di.len); next: prev_dc = next_dc; if (!prev_dc)