f2fs: fix to check extent cache in f2fs_drop_extent_tree
If noextent_cache mount option is on, we will never initialize extent tree in inode, but still we're going to access it in f2fs_drop_extent_tree, result in kernel panic as below: BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 IP: _raw_write_lock+0xc/0x30 Call Trace: ? f2fs_drop_extent_tree+0x41/0x70 [f2fs] f2fs_fallocate+0x5a0/0xdd0 [f2fs] ? common_file_perm+0x47/0xc0 ? apparmor_file_permission+0x1a/0x20 vfs_fallocate+0x15b/0x290 SyS_fallocate+0x44/0x70 do_syscall_64+0x6e/0x160 entry_SYSCALL64_slow_path+0x25/0x25 This patch fixes to check extent cache status before using in f2fs_drop_extent_tree. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
@@ -706,6 +706,9 @@ void f2fs_drop_extent_tree(struct inode *inode)
|
|||||||
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
|
||||||
struct extent_tree *et = F2FS_I(inode)->extent_tree;
|
struct extent_tree *et = F2FS_I(inode)->extent_tree;
|
||||||
|
|
||||||
|
if (!f2fs_may_extent_tree(inode))
|
||||||
|
return;
|
||||||
|
|
||||||
set_inode_flag(inode, FI_NO_EXTENT);
|
set_inode_flag(inode, FI_NO_EXTENT);
|
||||||
|
|
||||||
write_lock(&et->lock);
|
write_lock(&et->lock);
|
||||||
|
|||||||
Reference in New Issue
Block a user