fs/ntfs3: Fix an NULL dereference bug
[platform/kernel/linux-rpi.git] / fs / f2fs / extent_cache.c
index 0e2d491..ad8dfac 100644 (file)
@@ -74,40 +74,14 @@ static void __set_extent_info(struct extent_info *ei,
        }
 }
 
-static bool __may_read_extent_tree(struct inode *inode)
-{
-       struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-
-       if (!test_opt(sbi, READ_EXTENT_CACHE))
-               return false;
-       if (is_inode_flag_set(inode, FI_NO_EXTENT))
-               return false;
-       if (is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
-                        !f2fs_sb_has_readonly(sbi))
-               return false;
-       return S_ISREG(inode->i_mode);
-}
-
-static bool __may_age_extent_tree(struct inode *inode)
-{
-       struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
-
-       if (!test_opt(sbi, AGE_EXTENT_CACHE))
-               return false;
-       if (is_inode_flag_set(inode, FI_COMPRESSED_FILE))
-               return false;
-       if (file_is_cold(inode))
-               return false;
-
-       return S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode);
-}
-
 static bool __init_may_extent_tree(struct inode *inode, enum extent_type type)
 {
        if (type == EX_READ)
-               return __may_read_extent_tree(inode);
-       else if (type == EX_BLOCK_AGE)
-               return __may_age_extent_tree(inode);
+               return test_opt(F2FS_I_SB(inode), READ_EXTENT_CACHE) &&
+                       S_ISREG(inode->i_mode);
+       if (type == EX_BLOCK_AGE)
+               return test_opt(F2FS_I_SB(inode), AGE_EXTENT_CACHE) &&
+                       (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode));
        return false;
 }
 
@@ -120,7 +94,22 @@ static bool __may_extent_tree(struct inode *inode, enum extent_type type)
        if (list_empty(&F2FS_I_SB(inode)->s_list))
                return false;
 
-       return __init_may_extent_tree(inode, type);
+       if (!__init_may_extent_tree(inode, type))
+               return false;
+
+       if (type == EX_READ) {
+               if (is_inode_flag_set(inode, FI_NO_EXTENT))
+                       return false;
+               if (is_inode_flag_set(inode, FI_COMPRESSED_FILE) &&
+                                !f2fs_sb_has_readonly(F2FS_I_SB(inode)))
+                       return false;
+       } else if (type == EX_BLOCK_AGE) {
+               if (is_inode_flag_set(inode, FI_COMPRESSED_FILE))
+                       return false;
+               if (file_is_cold(inode))
+                       return false;
+       }
+       return true;
 }
 
 static void __try_update_largest_extent(struct extent_tree *et,