Procházet zdrojové kódy

vfs: shrink_dcache_parent before rmdir, dir rename

The dentry_unhash push-down series missed that shink_dcache_parent needs to
be called prior to rmdir or dir rename to clear DCACHE_REFERENCED and
allow efficient dentry reclaim.

Reported-by: Dave Chinner <david@fromorbit.com>
Signed-off-by: Sage Weil <sage@newdream.net>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Sage Weil před 14 roky
rodič
revize
3cebde2413
1 změnil soubory, kde provedl 3 přidání a 0 odebrání
  1. 3 0
      fs/namei.c

+ 3 - 0
fs/namei.c

@@ -2579,6 +2579,7 @@ int vfs_rmdir(struct inode *dir, struct dentry *dentry)
 	if (error)
 	if (error)
 		goto out;
 		goto out;
 
 
+	shrink_dcache_parent(dentry);
 	error = dir->i_op->rmdir(dir, dentry);
 	error = dir->i_op->rmdir(dir, dentry);
 	if (error)
 	if (error)
 		goto out;
 		goto out;
@@ -2993,6 +2994,8 @@ static int vfs_rename_dir(struct inode *old_dir, struct dentry *old_dentry,
 	if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry))
 	if (d_mountpoint(old_dentry) || d_mountpoint(new_dentry))
 		goto out;
 		goto out;
 
 
+	if (target)
+		shrink_dcache_parent(new_dentry);
 	error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
 	error = old_dir->i_op->rename(old_dir, old_dentry, new_dir, new_dentry);
 	if (error)
 	if (error)
 		goto out;
 		goto out;