ext3: Cleanup ext3_setup_super()
[pandora-kernel.git] / fs / ext3 / ialloc.c
index 498021e..9724aef 100644 (file)
@@ -119,20 +119,8 @@ void ext3_free_inode (handle_t *handle, struct inode * inode)
        ino = inode->i_ino;
        ext3_debug ("freeing inode %lu\n", ino);
 
-       /*
-        * Note: we must free any quota before locking the superblock,
-        * as writing the quota to disk may need the lock as well.
-        */
-       dquot_initialize(inode);
-       ext3_xattr_delete_inode(handle, inode);
-       dquot_free_inode(inode);
-       dquot_drop(inode);
-
        is_directory = S_ISDIR(inode->i_mode);
 
-       /* Do this BEFORE marking the inode not in use or returning an error */
-       clear_inode (inode);
-
        es = EXT3_SB(sb)->s_es;
        if (ino < EXT3_FIRST_INO(sb) || ino > le32_to_cpu(es->s_inodes_count)) {
                ext3_error (sb, "ext3_free_inode",
@@ -582,9 +570,14 @@ got:
        ei->i_state_flags = 0;
        ext3_set_inode_state(inode, EXT3_STATE_NEW);
 
-       ei->i_extra_isize =
-               (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) ?
-               sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0;
+       /* See comment in ext3_iget for explanation */
+       if (ino >= EXT3_FIRST_INO(sb) + 1 &&
+           EXT3_INODE_SIZE(sb) > EXT3_GOOD_OLD_INODE_SIZE) {
+               ei->i_extra_isize =
+                       sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE;
+       } else {
+               ei->i_extra_isize = 0;
+       }
 
        ret = inode;
        dquot_initialize(inode);