int error, rc = 0;
        int orphan = 0;
        const unsigned int ia_valid = attr->ia_valid;
+       bool inc_ivers = true;
 
        if (unlikely(ext4_forced_shutdown(EXT4_SB(inode->i_sb))))
                return -EIO;
                        return -EINVAL;
                }
 
-               if (attr->ia_size != inode->i_size)
-                       inode_inc_iversion(inode);
+               if (attr->ia_size == inode->i_size)
+                       inc_ivers = false;
 
                if (shrink) {
                        if (ext4_should_order_data(inode)) {
        }
 
        if (!error) {
+               if (inc_ivers)
+                       inode_inc_iversion(inode);
                setattr_copy(mnt_userns, inode, attr);
                mark_inode_dirty(inode);
        }
        }
        ext4_fc_track_inode(handle, inode);
 
-       /*
-        * ea_inodes are using i_version for storing reference count, don't
-        * mess with it
-        */
-       if (!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL))
-               inode_inc_iversion(inode);
-
        /* the do_update_inode consumes one bh->b_count */
        get_bh(iloc->bh);
 
 
        swap_inode_data(inode, inode_bl);
 
        inode->i_ctime = inode_bl->i_ctime = current_time(inode);
+       inode_inc_iversion(inode);
 
        inode->i_generation = prandom_u32();
        inode_bl->i_generation = prandom_u32();
        ext4_set_inode_flags(inode, false);
 
        inode->i_ctime = current_time(inode);
+       inode_inc_iversion(inode);
 
        err = ext4_mark_iloc_dirty(handle, inode, &iloc);
 flags_err:
 
        EXT4_I(inode)->i_projid = kprojid;
        inode->i_ctime = current_time(inode);
+       inode_inc_iversion(inode);
 out_dirty:
        rc = ext4_mark_iloc_dirty(handle, inode, &iloc);
        if (!err)
                err = ext4_reserve_inode_write(handle, inode, &iloc);
                if (err == 0) {
                        inode->i_ctime = current_time(inode);
+                       inode_inc_iversion(inode);
                        inode->i_generation = generation;
                        err = ext4_mark_iloc_dirty(handle, inode, &iloc);
                }
 
        if (!error) {
                ext4_xattr_update_super_block(handle, inode->i_sb);
                inode->i_ctime = current_time(inode);
+               inode_inc_iversion(inode);
                if (!value)
                        no_expand = 0;
                error = ext4_mark_iloc_dirty(handle, inode, &is.iloc);