Index: linux-2.6.27.21-0.1/fs/ext4/ext4_i.h =================================================================== --- linux-2.6.27.21-0.1.orig/fs/ext4/ext4_i.h 2009-06-15 06:23:34.000000000 -0400 +++ linux-2.6.27.21-0.1/fs/ext4/ext4_i.h 2009-06-15 17:09:59.000000000 -0400 @@ -36,6 +36,8 @@ typedef unsigned int ext4_group_t; #define rsv_start rsv_window._rsv_start #define rsv_end rsv_window._rsv_end +#define USE_I_FS_VERSION + /* * storage for cached extent */ @@ -138,6 +140,8 @@ struct ext4_inode_info { __u16 i_extra_isize; spinlock_t i_block_reservation_lock; + + __u64 i_fs_version; }; #endif /* _EXT4_I */ Index: linux-2.6.27.21-0.1/fs/ext4/ialloc.c =================================================================== --- linux-2.6.27.21-0.1.orig/fs/ext4/ialloc.c 2009-06-15 06:23:34.000000000 -0400 +++ linux-2.6.27.21-0.1/fs/ext4/ialloc.c 2009-06-15 16:59:35.000000000 -0400 @@ -888,6 +888,7 @@ got: ei->i_file_acl = 0; ei->i_dtime = 0; ei->i_block_group = group; + ei->i_fs_version = 0; ext4_set_inode_flags(inode); if (IS_DIRSYNC(inode)) Index: linux-2.6.27.21-0.1/fs/ext4/inode.c =================================================================== --- linux-2.6.27.21-0.1.orig/fs/ext4/inode.c 2009-06-15 06:23:34.000000000 -0400 +++ linux-2.6.27.21-0.1/fs/ext4/inode.c 2009-06-15 17:01:11.000000000 -0400 @@ -4201,10 +4201,10 @@ struct inode *ext4_iget(struct super_blo EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode); EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode); - 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; } @@ -4383,11 +4383,11 @@ static int ext4_do_update_inode(handle_t } else for (block = 0; block < EXT4_N_BLOCKS; block++) raw_inode->i_block[block] = ei->i_data[block]; - 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); }