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.23-rc5/fs/ext4/inode.c =================================================================== --- linux-2.6.23-rc5.orig/fs/ext4/inode.c 2007-09-12 16:49:55.000000000 -0700 +++ linux-2.6.23-rc5/fs/ext4/inode.c 2007-09-12 16:50:09.000000000 -0700 @@ -3076,6 +3076,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.23-rc5/fs/ext4/namei.c =================================================================== --- linux-2.6.23-rc5.orig/fs/ext4/namei.c 2007-09-12 16:48:23.000000000 -0700 +++ linux-2.6.23-rc5/fs/ext4/namei.c 2007-09-12 16:50:09.000000000 -0700 @@ -1318,7 +1318,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); @@ -1658,7 +1657,6 @@ static int ext4_delete_entry (handle_t * le16_to_cpu(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; @@ -2131,7 +2129,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 @@ -2377,7 +2374,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.23-rc5/fs/ext4/super.c =================================================================== --- linux-2.6.23-rc5.orig/fs/ext4/super.c 2007-09-12 16:25:40.000000000 -0700 +++ linux-2.6.23-rc5/fs/ext4/super.c 2007-09-12 16:50:09.000000000 -0700 @@ -2998,7 +2998,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);