From: Nikita Danilov This patches reiserfs_rename. It adds ctime update of renamed object. It also fixes calculation of maximal possible transaction size during rename. Thanks to Alex Adriaanse for finding this. fs/reiserfs/namei.c | 24 +++++++++++++++++------- 1 files changed, 17 insertions(+), 7 deletions(-) diff -puN fs/reiserfs/namei.c~reiserfs_rename-ctime-update fs/reiserfs/namei.c --- 25/fs/reiserfs/namei.c~reiserfs_rename-ctime-update 2003-12-26 19:45:35.000000000 -0800 +++ 25-akpm/fs/reiserfs/namei.c 2003-12-26 19:45:35.000000000 -0800 @@ -1088,11 +1088,16 @@ static int reiserfs_rename (struct inode int jbegin_count ; umode_t old_inode_mode; unsigned long savelink = 1; + struct timespec ctime; - /* two balancings: old name removal, new name insertion or "save" link, - stat data updates: old directory and new directory and maybe block - containing ".." of renamed directory */ - jbegin_count = JOURNAL_PER_BALANCE_CNT * 3 + 3; + /* three balancings: (1) old name removal, (2) new name insertion + and (3) maybe "save" link insertion + stat data updates: (1) old directory, + (2) new directory and (3) maybe old object stat data (when it is + directory) and (4) maybe stat data of object to which new entry + pointed initially and (5) maybe block containing ".." of + renamed directory */ + jbegin_count = JOURNAL_PER_BALANCE_CNT * 3 + 5; old_inode = old_dentry->d_inode; new_dentry_inode = new_dentry->d_inode; @@ -1255,8 +1260,12 @@ static int reiserfs_rename (struct inode mark_de_hidden (old_de.de_deh + old_de.de_entry_num); journal_mark_dirty (&th, old_dir->i_sb, old_de.de_bh); - old_dir->i_ctime = old_dir->i_mtime = - new_dir->i_ctime = new_dir->i_mtime = CURRENT_TIME; + ctime = CURRENT_TIME; + old_dir->i_ctime = old_dir->i_mtime = ctime; + new_dir->i_ctime = new_dir->i_mtime = ctime; + /* thanks to Alex Adriaanse for patch which adds ctime update of + renamed object */ + old_inode->i_ctime = ctime; if (new_dentry_inode) { // adjust link number of the victim @@ -1265,7 +1274,7 @@ static int reiserfs_rename (struct inode } else { new_dentry_inode->i_nlink--; } - new_dentry_inode->i_ctime = new_dir->i_ctime; + new_dentry_inode->i_ctime = ctime; savelink = new_dentry_inode->i_nlink; } @@ -1298,6 +1307,7 @@ static int reiserfs_rename (struct inode reiserfs_update_sd (&th, old_dir); reiserfs_update_sd (&th, new_dir); + reiserfs_update_sd (&th, old_inode); if (new_dentry_inode) { if (savelink == 0) _