Commit e4eaac06 authored by Sage Weil's avatar Sage Weil Committed by Al Viro
Browse files

vfs: push dentry_unhash on rename_dir into file systems



Only a few file systems need this.  Start by pushing it down into each
rename method (except gfs2 and xfs) so that it can be dealt with on a
per-fs basis.

Acked-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarSage Weil <sage@newdream.net>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 79bf7c73
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -840,6 +840,9 @@ v9fs_vfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	struct p9_fid *newdirfid;
	struct p9_wstat wstat;

	if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode))
		dentry_unhash(new_dentry);

	P9_DPRINTK(P9_DEBUG_VFS, "\n");
	retval = 0;
	old_inode = old_dentry->d_inode;
+3 −0
Original line number Diff line number Diff line
@@ -419,6 +419,9 @@ affs_rename(struct inode *old_dir, struct dentry *old_dentry,
	struct buffer_head *bh = NULL;
	int retval;

	if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode))
		dentry_unhash(new_dentry);

	pr_debug("AFFS: rename(old=%u,\"%*s\" to new=%u,\"%*s\")\n",
		 (u32)old_dir->i_ino, (int)old_dentry->d_name.len, old_dentry->d_name.name,
		 (u32)new_dir->i_ino, (int)new_dentry->d_name.len, new_dentry->d_name.name);
+3 −0
Original line number Diff line number Diff line
@@ -1148,6 +1148,9 @@ static int afs_rename(struct inode *old_dir, struct dentry *old_dentry,
	struct key *key;
	int ret;

	if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode))
		dentry_unhash(new_dentry);

	vnode = AFS_FS_I(old_dentry->d_inode);
	orig_dvnode = AFS_FS_I(old_dir);
	new_dvnode = AFS_FS_I(new_dir);
+3 −0
Original line number Diff line number Diff line
@@ -224,6 +224,9 @@ static int bfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	struct bfs_sb_info *info;
	int error = -ENOENT;

	if (new_dentry->d_inode && S_ISDIR(new_dentry->d_inode->i_mode))
		dentry_unhash(new_dentry);

	old_bh = new_bh = NULL;
	old_inode = old_dentry->d_inode;
	if (S_ISDIR(old_inode->i_mode))
+3 −0
Original line number Diff line number Diff line
@@ -6994,6 +6994,9 @@ static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry,
	u64 root_objectid;
	int ret;

	if (new_inode && S_ISDIR(new_dentry->d_inode->i_mode))
		dentry_unhash(new_dentry);

	if (new_dir->i_ino == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)
		return -EPERM;

Loading