Merge tag 'ext4_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso...
[sfrench/cifs-2.6.git] / fs / ext4 / super.c
index fc6fa2c93e77c193939d095435a84fc188c53479..3681cb737e9d938585e902af4b5a21511c968c2e 100644 (file)
@@ -1111,9 +1111,8 @@ static int ext4_drop_inode(struct inode *inode)
        return drop;
 }
 
-static void ext4_i_callback(struct rcu_head *head)
+static void ext4_free_in_core_inode(struct inode *inode)
 {
-       struct inode *inode = container_of(head, struct inode, i_rcu);
        kmem_cache_free(ext4_inode_cachep, EXT4_I(inode));
 }
 
@@ -1128,7 +1127,6 @@ static void ext4_destroy_inode(struct inode *inode)
                                true);
                dump_stack();
        }
-       call_rcu(&inode->i_rcu, ext4_i_callback);
 }
 
 static void init_once(void *foo)
@@ -1406,6 +1404,7 @@ static const struct quotactl_ops ext4_qctl_operations = {
 
 static const struct super_operations ext4_sops = {
        .alloc_inode    = ext4_alloc_inode,
+       .free_inode     = ext4_free_in_core_inode,
        .destroy_inode  = ext4_destroy_inode,
        .write_inode    = ext4_write_inode,
        .dirty_inode    = ext4_dirty_inode,
@@ -2740,13 +2739,9 @@ static loff_t ext4_max_size(int blkbits, int has_huge_files)
        loff_t res;
        loff_t upper_limit = MAX_LFS_FILESIZE;
 
-       /* small i_blocks in vfs inode? */
-       if (!has_huge_files || sizeof(blkcnt_t) < sizeof(u64)) {
-               /*
-                * CONFIG_LBDAF is not enabled implies the inode
-                * i_block represent total blocks in 512 bytes
-                * 32 == size of vfs inode i_blocks * 8
-                */
+       BUILD_BUG_ON(sizeof(blkcnt_t) < sizeof(u64));
+
+       if (!has_huge_files) {
                upper_limit = (1LL << 32) - 1;
 
                /* total blocks in file system block size */
@@ -2787,11 +2782,11 @@ static loff_t ext4_max_bitmap_size(int bits, int has_huge_files)
         * number of 512-byte sectors of the file.
         */
 
-       if (!has_huge_files || sizeof(blkcnt_t) < sizeof(u64)) {
+       if (!has_huge_files) {
                /*
-                * !has_huge_files or CONFIG_LBDAF not enabled implies that
-                * the inode i_block field represents total file blocks in
-                * 2^32 512-byte sectors == size of vfs inode i_blocks * 8
+                * !has_huge_files or implies that the inode i_block field
+                * represents total file blocks in 2^32 512-byte sectors ==
+                * size of vfs inode i_blocks * 8
                 */
                upper_limit = (1LL << 32) - 1;
 
@@ -2940,18 +2935,6 @@ static int ext4_feature_set_ok(struct super_block *sb, int readonly)
                                ~EXT4_FEATURE_RO_COMPAT_SUPP));
                return 0;
        }
-       /*
-        * Large file size enabled file system can only be mounted
-        * read-write on 32-bit systems if kernel is built with CONFIG_LBDAF
-        */
-       if (ext4_has_feature_huge_file(sb)) {
-               if (sizeof(blkcnt_t) < sizeof(u64)) {
-                       ext4_msg(sb, KERN_ERR, "Filesystem with huge files "
-                                "cannot be mounted RDWR without "
-                                "CONFIG_LBDAF");
-                       return 0;
-               }
-       }
        if (ext4_has_feature_bigalloc(sb) && !ext4_has_feature_extents(sb)) {
                ext4_msg(sb, KERN_ERR,
                         "Can't support bigalloc feature without "
@@ -4168,8 +4151,6 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
        if (err) {
                ext4_msg(sb, KERN_ERR, "filesystem"
                         " too large to mount safely on this system");
-               if (sizeof(sector_t) < 8)
-                       ext4_msg(sb, KERN_WARNING, "CONFIG_LBDAF not enabled");
                goto failed_mount;
        }