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 insertion(+), 5 deletions(-) Index: linux-2.6.24-rc1/fs/ext4/inode.c =================================================================== --- linux-2.6.24-rc1.orig/fs/ext4/inode.c 2007-10-24 11:40:36.000000000 -0700 +++ linux-2.6.24-rc1/fs/ext4/inode.c 2007-10-24 11:40:37.000000000 -0700 @@ -3200,6 +3200,7 @@ int ext4_mark_iloc_dirty(handle_t *handl { int err = 0; + inode->i_version++; /* the do_update_inode consumes one bh->b_count */ get_bh(iloc->bh); Index: linux-2.6.24-rc1/fs/ext4/namei.c =================================================================== --- linux-2.6.24-rc1.orig/fs/ext4/namei.c 2007-10-24 11:39:43.000000000 -0700 +++ linux-2.6.24-rc1/fs/ext4/namei.c 2007-10-24 11:40:37.000000000 -0700 @@ -1349,7 +1349,6 @@ static int add_dirent_to_buf(handle_t *h */ 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); @@ -1659,7 +1658,6 @@ static int ext4_delete_entry (handle_t * 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; @@ -2117,7 +2115,6 @@ static int ext4_rmdir (struct inode * di 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 @@ -2362,7 +2359,6 @@ static int ext4_rename (struct inode * o 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); Index: linux-2.6.24-rc1/fs/ext4/super.c =================================================================== --- linux-2.6.24-rc1.orig/fs/ext4/super.c 2007-10-24 11:40:29.000000000 -0700 +++ linux-2.6.24-rc1/fs/ext4/super.c 2007-10-24 11:40:37.000000000 -0700 @@ -3146,7 +3146,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);