From: Maneesh Soni <maneesh@in.ibm.com>

The following patch fixes the dentry refcounting, during
sysfs_remove_group() and also adds the missing dput() for the "extra" ref
taken during sysfs_create() for the sub-directory dentry corresponding to
attribute group.  



---

 fs/sysfs/dir.c   |    2 ++
 fs/sysfs/group.c |    5 +++--
 2 files changed, 5 insertions(+), 2 deletions(-)

diff -puN fs/sysfs/dir.c~sysfs_remove_subdir-dentry-leak-fix fs/sysfs/dir.c
--- 25/fs/sysfs/dir.c~sysfs_remove_subdir-dentry-leak-fix	2004-02-16 23:28:43.000000000 -0800
+++ 25-akpm/fs/sysfs/dir.c	2004-02-16 23:28:43.000000000 -0800
@@ -96,6 +96,8 @@ static void remove_dir(struct dentry * d
 void sysfs_remove_subdir(struct dentry * d)
 {
 	remove_dir(d);
+	/* release the "extra" ref taken during sysfs_create() */
+	dput(d);
 }
 
 
diff -puN fs/sysfs/group.c~sysfs_remove_subdir-dentry-leak-fix fs/sysfs/group.c
--- 25/fs/sysfs/group.c~sysfs_remove_subdir-dentry-leak-fix	2004-02-16 23:28:43.000000000 -0800
+++ 25-akpm/fs/sysfs/group.c	2004-02-16 23:28:43.000000000 -0800
@@ -68,12 +68,13 @@ void sysfs_remove_group(struct kobject *
 	if (grp->name)
 		dir = sysfs_get_dentry(kobj->dentry,grp->name);
 	else
-		dir = kobj->dentry;
+		dir = dget(kobj->dentry);
 
 	remove_files(dir,grp);
-	dput(dir);
 	if (grp->name)
 		sysfs_remove_subdir(dir);
+	/* release the ref. taken in this routine */
+	dput(dir);
 }
 
 

_