From c8ebae85eb2b8391763dd874e42103cb6b987500 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Wed, 28 Feb 2018 15:45:03 +0100 Subject: [PATCH] 4.4-stable patches added patches: f2fs-fix-a-bug-caused-by-null-extent-tree.patch --- ...fix-a-bug-caused-by-null-extent-tree.patch | 60 +++++++++++++++++++ queue-4.4/series | 1 + 2 files changed, 61 insertions(+) create mode 100644 queue-4.4/f2fs-fix-a-bug-caused-by-null-extent-tree.patch diff --git a/queue-4.4/f2fs-fix-a-bug-caused-by-null-extent-tree.patch b/queue-4.4/f2fs-fix-a-bug-caused-by-null-extent-tree.patch new file mode 100644 index 00000000000..d7056a92efd --- /dev/null +++ b/queue-4.4/f2fs-fix-a-bug-caused-by-null-extent-tree.patch @@ -0,0 +1,60 @@ +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 | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +--- a/fs/f2fs/extent_cache.c ++++ b/fs/f2fs/extent_cache.c +@@ -172,7 +172,7 @@ void f2fs_drop_largest_extent(struct ino + __drop_largest_extent(inode, fofs, 1); + } + +-void f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) ++static void __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; +@@ -204,6 +204,14 @@ out: + write_unlock(&et->lock); + } + ++void f2fs_init_extent_tree(struct inode *inode, struct f2fs_extent *i_ext) ++{ ++ __f2fs_init_extent_tree(inode, i_ext); ++ ++ if (!F2FS_I(inode)->extent_tree) ++ set_inode_flag(F2FS_I(inode), FI_NO_EXTENT); ++} ++ + static bool f2fs_lookup_extent_tree(struct inode *inode, pgoff_t pgofs, + struct extent_info *ei) + { diff --git a/queue-4.4/series b/queue-4.4/series index abaef70c6f0..22e0bc6031c 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -1 +1,2 @@ hrtimer-ensure-posix-compliance-relative-clock_realtime-hrtimers.patch +f2fs-fix-a-bug-caused-by-null-extent-tree.patch -- 2.47.3