Commit 4e2e30bb authored by Andrew Morton's avatar Andrew Morton Committed by Linus Torvalds

[PATCH] reiserfs_rename ctime update

From: Nikita Danilov <Nikita@Namesys.COM>

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 <alex_a@caltech.edu> for finding this.
parent a8007b5b
...@@ -1088,11 +1088,16 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1088,11 +1088,16 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
int jbegin_count ; int jbegin_count ;
umode_t old_inode_mode; umode_t old_inode_mode;
unsigned long savelink = 1; unsigned long savelink = 1;
struct timespec ctime;
/* two balancings: old name removal, new name insertion or "save" link, /* three balancings: (1) old name removal, (2) new name insertion
stat data updates: old directory and new directory and maybe block and (3) maybe "save" link insertion
containing ".." of renamed directory */ stat data updates: (1) old directory,
jbegin_count = JOURNAL_PER_BALANCE_CNT * 3 + 3; (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; old_inode = old_dentry->d_inode;
new_dentry_inode = new_dentry->d_inode; new_dentry_inode = new_dentry->d_inode;
...@@ -1255,8 +1260,12 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1255,8 +1260,12 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
mark_de_hidden (old_de.de_deh + old_de.de_entry_num); mark_de_hidden (old_de.de_deh + old_de.de_entry_num);
journal_mark_dirty (&th, old_dir->i_sb, old_de.de_bh); journal_mark_dirty (&th, old_dir->i_sb, old_de.de_bh);
old_dir->i_ctime = old_dir->i_mtime = ctime = CURRENT_TIME;
new_dir->i_ctime = new_dir->i_mtime = CURRENT_TIME; old_dir->i_ctime = old_dir->i_mtime = ctime;
new_dir->i_ctime = new_dir->i_mtime = ctime;
/* thanks to Alex Adriaanse <alex_a@caltech.edu> for patch which adds ctime update of
renamed object */
old_inode->i_ctime = ctime;
if (new_dentry_inode) { if (new_dentry_inode) {
// adjust link number of the victim // adjust link number of the victim
...@@ -1265,7 +1274,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1265,7 +1274,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
} else { } else {
new_dentry_inode->i_nlink--; 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; savelink = new_dentry_inode->i_nlink;
} }
...@@ -1298,6 +1307,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry, ...@@ -1298,6 +1307,7 @@ static int reiserfs_rename (struct inode * old_dir, struct dentry *old_dentry,
reiserfs_update_sd (&th, old_dir); reiserfs_update_sd (&th, old_dir);
reiserfs_update_sd (&th, new_dir); reiserfs_update_sd (&th, new_dir);
reiserfs_update_sd (&th, old_inode);
if (new_dentry_inode) { if (new_dentry_inode) {
if (savelink == 0) if (savelink == 0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment