Index: linux-3.10.0-123.el7.x86_64/fs/ext4/inode.c =================================================================== --- linux-3.10.0-123.el7.x86_64.orig/fs/ext4/inode.c +++ linux-3.10.0-123.el7.x86_64/fs/ext4/inode.c @@ -4286,10 +4286,10 @@ struct inode *ext4_iget(struct super_blo EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode); if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { - inode->i_version = le32_to_cpu(raw_inode->i_disk_version); + ei->i_fs_version = le32_to_cpu(raw_inode->i_disk_version); if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) { if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi)) - inode->i_version |= + ei->i_fs_version |= (__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32; } } @@ -4506,11 +4506,11 @@ static int ext4_do_update_inode(handle_t } if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) { - raw_inode->i_disk_version = cpu_to_le32(inode->i_version); + raw_inode->i_disk_version = cpu_to_le32(ei->i_fs_version); if (ei->i_extra_isize) { if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi)) raw_inode->i_version_hi = - cpu_to_le32(inode->i_version >> 32); + cpu_to_le32(ei->i_fs_version >> 32); raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize); } Index: linux-3.10.0-123.el7.x86_64/fs/ext4/ialloc.c =================================================================== --- linux-3.10.0-123.el7.x86_64.orig/fs/ext4/ialloc.c +++ linux-3.10.0-123.el7.x86_64/fs/ext4/ialloc.c @@ -898,6 +898,7 @@ got: ei->i_dtime = 0; ei->i_block_group = group; ei->i_last_alloc_group = ~0; + ei->i_fs_version = 0; ext4_set_inode_flags(inode); if (IS_DIRSYNC(inode)) Index: linux-3.10.0-123.el7.x86_64/fs/ext4/ext4.h =================================================================== --- linux-3.10.0-123.el7.x86_64.orig/fs/ext4/ext4.h +++ linux-3.10.0-123.el7.x86_64/fs/ext4/ext4.h @@ -921,6 +921,8 @@ struct ext4_inode_info { tid_t i_sync_tid; tid_t i_datasync_tid; + __u64 i_fs_version; + /* Precomputed uuid+inum+igen checksum for seeding inode checksums */ __u32 i_csum_seed; };