From: Greg Kroah-Hartman Date: Wed, 28 Feb 2018 14:46:08 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v3.18.98~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=115edc09dbd908e5c105ddd9747b29851737aea7;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: f2fs-fix-a-bug-caused-by-null-extent-tree.patch --- diff --git a/queue-4.9/f2fs-fix-a-bug-caused-by-null-extent-tree.patch b/queue-4.9/f2fs-fix-a-bug-caused-by-null-extent-tree.patch new file mode 100644 index 00000000000..d7531257cab --- /dev/null +++ b/queue-4.9/f2fs-fix-a-bug-caused-by-null-extent-tree.patch @@ -0,0 +1,62 @@ +From dad48e73127ba10279ea33e6dbc8d3905c4d31c0 Mon Sep 17 00:00:00 2001 +From: Yunlei He +Date: Fri, 19 May 2017 15:06:12 +0800 +Subject: f2fs: fix a bug caused by NULL extent tree + +From: Yunlei He + +commit dad48e73127ba10279ea33e6dbc8d3905c4d31c0 upstream. + +Thread A: Thread B: + +-f2fs_remount + -sbi->mount_opt.opt = 0; + <--- -f2fs_iget + -do_read_inode + -f2fs_init_extent_tree + -F2FS_I(inode)->extent_tree is NULL + -default_options && parse_options + -remount return + <--- -f2fs_map_blocks + -f2fs_lookup_extent_tree + -f2fs_bug_on(sbi, !et); + +The same problem with f2fs_new_inode. + +Signed-off-by: Yunlei He +Signed-off-by: Jaegeuk Kim +Signed-off-by: Nikolay Borisov +Signed-off-by: Greg Kroah-Hartman + +--- + fs/f2fs/extent_cache.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +--- a/fs/f2fs/extent_cache.c ++++ b/fs/f2fs/extent_cache.c +@@ -177,7 +177,7 @@ static void __drop_largest_extent(struct + } + + /* return true, if inode page is changed */ +-bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) ++static bool __f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) + { + struct f2fs_sb_info *sbi = F2FS_I_SB(inode); + struct extent_tree *et; +@@ -215,6 +215,16 @@ out: + return false; + } + ++bool f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) ++{ ++ bool ret = __f2fs_init_extent_tree(inode, i_ext); ++ ++ if (!F2FS_I(inode)->extent_tree) ++ set_inode_flag(inode, FI_NO_EXTENT); ++ ++ return ret; ++} ++ + static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs, + struct extent_info *ei) + { diff --git a/queue-4.9/series b/queue-4.9/series index c3bf5a8633d..6e86da7ef7d 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -1,2 +1,3 @@ hrtimer-ensure-posix-compliance-relative-clock_realtime-hrtimers.patch i2c-designware-must-wait-for-enable.patch +f2fs-fix-a-bug-caused-by-null-extent-tree.patch