[PATCH 20/38] union-mount: Free union dirs on removal from dcache

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Valerie Aurora
Date: Friday, August 6, 2010 - 3:35 pm

If a dentry is removed from dentry cache because its usage count drops
to zero, the union_dirs in its union stack are freed too.

Signed-off-by: Valerie Aurora <vaurora@redhat.com>
---
 fs/dcache.c |   11 +++++++++++
 1 files changed, 11 insertions(+), 0 deletions(-)

diff --git a/fs/dcache.c b/fs/dcache.c
index c7b6e67..4fe51a9 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -34,6 +34,7 @@
 #include <linux/fs_struct.h>
 #include <linux/hardirq.h>
 #include "internal.h"
+#include "union.h"
 
 int sysctl_vfs_cache_pressure __read_mostly = 100;
 EXPORT_SYMBOL_GPL(sysctl_vfs_cache_pressure);
@@ -175,6 +176,7 @@ static struct dentry *d_kill(struct dentry *dentry)
 	dentry_stat.nr_dentry--;	/* For d_free, below */
 	/*drops the locks, at that point nobody can reach this dentry */
 	dentry_iput(dentry);
+	d_free_unions(dentry);
 	if (IS_ROOT(dentry))
 		parent = NULL;
 	else
@@ -695,6 +697,7 @@ static void shrink_dcache_for_umount_subtree(struct dentry *dentry)
 					iput(inode);
 			}
 
+			d_free_unions(dentry);
 			d_free(dentry);
 
 			/* finished when we fall off the top of the tree,
@@ -1535,6 +1538,7 @@ void d_delete(struct dentry * dentry)
 	if (atomic_read(&dentry->d_count) == 1) {
 		dentry->d_flags &= ~DCACHE_CANT_MOUNT;
 		dentry_iput(dentry);
+		d_free_unions(dentry);
 		fsnotify_nameremove(dentry, isdir);
 		return;
 	}
@@ -1545,6 +1549,13 @@ void d_delete(struct dentry * dentry)
 	spin_unlock(&dentry->d_lock);
 	spin_unlock(&dcache_lock);
 
+	/*
+	 * Remove any associated unions.  While someone still has this
+	 * directory open (ref count > 0), we could not have deleted
+	 * it unless it was empty, and therefore has no references to
+	 * directories below it.  So we don't need the unions.
+	 */
+	d_free_unions(dentry);
 	fsnotify_nameremove(dentry, isdir);
 }
 EXPORT_SYMBOL(d_delete);
-- 
1.6.3.3

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 00/38] VFS union mounts - Add MS_FALLTHRU, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 09/38] whiteout: tmpfs whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 11/38] whiteout: ext2 whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 12/38] whiteout: jffs2 whiteout support, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 13/38] fallthru: Basic fallthru definitions, Valerie Aurora, (Fri Aug 6, 3:34 pm)
[PATCH 14/38] fallthru: ext2 fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 15/38] fallthru: jffs2 fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 16/38] fallthru: tmpfs fallthru support, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 17/38] union-mount: Union mounts documentation, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 20/38] union-mount: Free union dirs on removal from ..., Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 22/38] union-mount: Implement union lookup, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 27/38] union-mount: In-kernel file copyup routines, Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 29/38] union-mount: Implement union-aware link(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 30/38] union-mount: Implement union-aware rename(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 32/38] union-mount: Implement union-aware chown(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
[PATCH 35/38] union-mount: Implement union-aware lchown(), Valerie Aurora, (Fri Aug 6, 3:35 pm)
Re: [PATCH 14/38] fallthru: ext2 fallthru support, Andreas Dilger, (Fri Aug 6, 5:28 pm)
Re: [PATCH 14/38] fallthru: ext2 fallthru support, Valerie Aurora, (Sun Aug 8, 9:40 am)