--- a/fs/f2fs/extent_cache.c +++ b/fs/f2fs/extent_cache.c @@ -789,6 +789,8 @@ static void __update_extent_tree_range(struct inode *inode, BUG_ON(type != EX_READ); if (tei->blk) { + struct extent_tree_info *eti = &sbi->extent_tree[et->type]; + mutex_lock(&eti->extent_tree_lock); __set_extent_info(&ei, fofs, len, tei->blk, false, 0, 0, EX_READ); if (!__try_merge_extent_node(sbi, et, &ei, prev_en, next_en)) @@ -803,6 +805,7 @@ static void __update_extent_tree_range(struct inode *inode, et->largest_updated = true; set_inode_flag(inode, FI_NO_EXTENT); } + mutex_unlock(&eti->extent_tree_lock); } if (is_inode_flag_set(inode, FI_NO_EXTENT))