ext4: fix warning in ext4_handle_inode_extension
[sfrench/cifs-2.6.git] / fs / ext4 / inode.c
index 646ece9b3455ffc04007f330974e3f2284e01bc1..15165c87c915b33b52f7eea7c6509aa93fb1af59 100644 (file)
@@ -5398,6 +5398,7 @@ int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
        if (attr->ia_valid & ATTR_SIZE) {
                handle_t *handle;
                loff_t oldsize = inode->i_size;
+               loff_t old_disksize;
                int shrink = (attr->ia_size < inode->i_size);
 
                if (!(ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS))) {
@@ -5469,6 +5470,7 @@ int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
                                        inode->i_sb->s_blocksize_bits);
 
                        down_write(&EXT4_I(inode)->i_data_sem);
+                       old_disksize = EXT4_I(inode)->i_disksize;
                        EXT4_I(inode)->i_disksize = attr->ia_size;
                        rc = ext4_mark_inode_dirty(handle, inode);
                        if (!error)
@@ -5480,6 +5482,8 @@ int ext4_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
                         */
                        if (!error)
                                i_size_write(inode, attr->ia_size);
+                       else
+                               EXT4_I(inode)->i_disksize = old_disksize;
                        up_write(&EXT4_I(inode)->i_data_sem);
                        ext4_journal_stop(handle);
                        if (error)