Messages in this thread Patch in this message | | | From | Jaegeuk Kim <> | Subject | [PATCH 04/12] f2fs: remove wrong f2fs_bug_on when merging extents | Date | Mon, 29 Jun 2015 11:39:28 -0700 |
| |
In f2fs_update_extent_tree, if there is existing extent, f2fs tries to split it with two parts. In each trial, __insert_extent_tree checks __is_front/back_mergeable, and then if it hits to go, there is f2fs_bug_on(!den), which triggers a kernel panic.
Actually, we don't need to check this. Instead, we can do __try_back_merge only when there exists a den pointer.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- fs/f2fs/data.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 9bedfa8..7817167 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -519,19 +519,19 @@ static struct extent_node *__insert_extent_tree(struct f2fs_sb_info *sbi, if (ei->fofs < en->ei.fofs) { if (__is_front_mergeable(ei, &en->ei)) { - f2fs_bug_on(sbi, !den); en->ei.fofs = ei->fofs; en->ei.blk = ei->blk; en->ei.len += ei->len; - *den = __try_back_merge(sbi, et, en); + if (den) + *den = __try_back_merge(sbi, et, en); return en; } p = &(*p)->rb_left; } else if (ei->fofs >= en->ei.fofs + en->ei.len) { if (__is_back_mergeable(ei, &en->ei)) { - f2fs_bug_on(sbi, !den); en->ei.len += ei->len; - *den = __try_front_merge(sbi, et, en); + if (den) + *den = __try_front_merge(sbi, et, en); return en; } p = &(*p)->rb_right; -- 2.1.1
| |