Skip to content

Commit 63cf207

Browse files
committed
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
Pull vfs fixes from Al Viro: "A couple of fixes: Fix for my dumb braino in ncpfs and a long-standing breakage on recovery from failed rename() in jffs2" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: jffs2: reduce the breakage on recovery from halfway failed rename() ncpfs: fix a braino in OOM handling in ncp_fill_cache()
2 parents f2c1242 + f938128 commit 63cf207

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

fs/jffs2/dir.c

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -843,9 +843,14 @@ static int jffs2_rename (struct inode *old_dir_i, struct dentry *old_dentry,
843843

844844
pr_notice("%s(): Link succeeded, unlink failed (err %d). You now have a hard link\n",
845845
__func__, ret);
846-
/* Might as well let the VFS know */
847-
d_instantiate(new_dentry, d_inode(old_dentry));
848-
ihold(d_inode(old_dentry));
846+
/*
847+
* We can't keep the target in dcache after that.
848+
* For one thing, we can't afford dentry aliases for directories.
849+
* For another, if there was a victim, we _can't_ set new inode
850+
* for that sucker and we have to trigger mount eviction - the
851+
* caller won't do it on its own since we are returning an error.
852+
*/
853+
d_invalidate(new_dentry);
849854
new_dir_i->i_mtime = new_dir_i->i_ctime = ITIME(now);
850855
return ret;
851856
}

fs/ncpfs/dir.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ ncp_fill_cache(struct file *file, struct dir_context *ctx,
633633
d_rehash(newdent);
634634
} else {
635635
spin_lock(&dentry->d_lock);
636-
NCP_FINFO(inode)->flags &= ~NCPI_DIR_CACHE;
636+
NCP_FINFO(dir)->flags &= ~NCPI_DIR_CACHE;
637637
spin_unlock(&dentry->d_lock);
638638
}
639639
} else {

0 commit comments

Comments
 (0)