Commit 22ba747f authored by Al Viro's avatar Al Viro

jffs2: fix IN_DELETE_SELF on overwriting rename() killing a directory

We don't generate IN_DELETE_SELF on victim of overwriting rename() if
it happens to be a directory.  Trivially fixed by doing to ->i_nlink
what we do ->pino_nlink a couple of lines later in jffs2_rename().
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 841590ce
...@@ -820,7 +820,10 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry, ...@@ -820,7 +820,10 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
if (victim_f) { if (victim_f) {
/* There was a victim. Kill it off nicely */ /* There was a victim. Kill it off nicely */
drop_nlink(new_dentry->d_inode); if (S_ISDIR(new_dentry->d_inode->i_mode))
clear_nlink(new_dentry->d_inode);
else
drop_nlink(new_dentry->d_inode);
/* Don't oops if the victim was a dirent pointing to an /* Don't oops if the victim was a dirent pointing to an
inode which didn't exist. */ inode which didn't exist. */
if (victim_f->inocache) { if (victim_f->inocache) {
......
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