|
@@ -4874,12 +4874,14 @@ struct inode *ext4_iget(struct super_block *sb, unsigned long ino)
|
|
EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
|
|
EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
|
|
|
|
|
|
if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
|
|
if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
|
|
- inode->i_version = le32_to_cpu(raw_inode->i_disk_version);
|
|
|
|
|
|
+ u64 ivers = le32_to_cpu(raw_inode->i_disk_version);
|
|
|
|
+
|
|
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
|
|
if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
|
|
if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
|
|
if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
|
|
- inode->i_version |=
|
|
|
|
|
|
+ ivers |=
|
|
(__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
|
|
(__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
|
|
}
|
|
}
|
|
|
|
+ inode_set_iversion_queried(inode, ivers);
|
|
}
|
|
}
|
|
|
|
|
|
ret = 0;
|
|
ret = 0;
|
|
@@ -5165,11 +5167,13 @@ static int ext4_do_update_inode(handle_t *handle,
|
|
}
|
|
}
|
|
|
|
|
|
if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
|
|
if (likely(!test_opt2(inode->i_sb, HURD_COMPAT))) {
|
|
- raw_inode->i_disk_version = cpu_to_le32(inode->i_version);
|
|
|
|
|
|
+ u64 ivers = inode_peek_iversion(inode);
|
|
|
|
+
|
|
|
|
+ raw_inode->i_disk_version = cpu_to_le32(ivers);
|
|
if (ei->i_extra_isize) {
|
|
if (ei->i_extra_isize) {
|
|
if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
|
|
if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
|
|
raw_inode->i_version_hi =
|
|
raw_inode->i_version_hi =
|
|
- cpu_to_le32(inode->i_version >> 32);
|
|
|
|
|
|
+ cpu_to_le32(ivers >> 32);
|
|
raw_inode->i_extra_isize =
|
|
raw_inode->i_extra_isize =
|
|
cpu_to_le16(ei->i_extra_isize);
|
|
cpu_to_le16(ei->i_extra_isize);
|
|
}
|
|
}
|