ext4: i_version update fix From: Jean Noel Cordenner The i_version field of the inode is set on inode creation and incremented when the inode is being modified. Signed-off-by: Jean Noel Cordenner Signed-off-by: Aneesh Kumar K.V Signed-off-by: Mingming Cao --- fs/ext4/inode.c | 1 + fs/ext4/namei.c | 4 ---- fs/ext4/super.c | 1 - 3 files changed, 1 insertions(+), 5 deletions(-) diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index fbb595c..0478b18 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -3066,6 +3066,7 @@ int ext4_mark_iloc_dirty(handle_t *handle, { int err = 0; + inode->i_version++; /* the do_update_inode consumes one bh->b_count */ get_bh(iloc->bh); diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index bc3825d..4c19f9b 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -1344,7 +1344,6 @@ static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry, */ dir->i_mtime = dir->i_ctime = ext4_current_time(dir); ext4_update_dx_flag(dir); - dir->i_version++; ext4_mark_inode_dirty(handle, dir); BUFFER_TRACE(bh, "call ext4_journal_dirty_metadata"); err = ext4_journal_dirty_metadata(handle, bh); @@ -1654,7 +1653,6 @@ static int ext4_delete_entry (handle_t *handle, ext4_rec_len_from_disk(de->rec_len)); else de->inode = 0; - dir->i_version++; BUFFER_TRACE(bh, "call ext4_journal_dirty_metadata"); ext4_journal_dirty_metadata(handle, bh); return 0; @@ -2112,7 +2110,6 @@ static int ext4_rmdir (struct inode * dir, struct dentry *dentry) ext4_warning (inode->i_sb, "ext4_rmdir", "empty directory has too many links (%d)", inode->i_nlink); - inode->i_version++; clear_nlink(inode); /* There's no need to set i_disksize: the fact that i_nlink is * zero will ensure that the right thing happens during any @@ -2357,7 +2354,6 @@ static int ext4_rename (struct inode * old_dir, struct dentry *old_dentry, if (EXT4_HAS_INCOMPAT_FEATURE(new_dir->i_sb, EXT4_FEATURE_INCOMPAT_FILETYPE)) new_de->file_type = old_de->file_type; - new_dir->i_version++; BUFFER_TRACE(new_bh, "call ext4_journal_dirty_metadata"); ext4_journal_dirty_metadata(handle, new_bh); brelse(new_bh); diff --git a/fs/ext4/super.c b/fs/ext4/super.c index bf452e3..08c8c6c 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -2948,7 +2948,6 @@ out: i_size_write(inode, off+len-towrite); EXT4_I(inode)->i_disksize = inode->i_size; } - inode->i_version++; inode->i_mtime = inode->i_ctime = CURRENT_TIME; ext4_mark_inode_dirty(handle, inode); mutex_unlock(&inode->i_mutex);