From: Maneesh Soni 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); } _