| From stable-bounces@linux.kernel.org Fri Sep 29 01:06:11 2006 |
| Message-Id: <200609290805.k8T85NNE008467@shell0.pdx.osdl.net> |
| To: seto.hidetoshi@jp.fujitsu.com, greg@kroah.com, stable@kernel.org, |
| mm-commits@vger.kernel.org |
| From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> |
| Date: Fri, 29 Sep 2006 01:05:23 -0700 |
| Subject: sysfs: remove duplicated dput in sysfs_update_file |
| |
| From: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> |
| |
| Following function can drops d_count twice against one reference |
| by lookup_one_len. |
| |
| <SOURCE> |
| /** |
| * sysfs_update_file - update the modified timestamp on an object attribute. |
| * @kobj: object we're acting for. |
| * @attr: attribute descriptor. |
| */ |
| int sysfs_update_file(struct kobject * kobj, const struct attribute * attr) |
| { |
| struct dentry * dir = kobj->dentry; |
| struct dentry * victim; |
| int res = -ENOENT; |
| |
| mutex_lock(&dir->d_inode->i_mutex); |
| victim = lookup_one_len(attr->name, dir, strlen(attr->name)); |
| if (!IS_ERR(victim)) { |
| /* make sure dentry is really there */ |
| if (victim->d_inode && |
| (victim->d_parent->d_inode == dir->d_inode)) { |
| victim->d_inode->i_mtime = CURRENT_TIME; |
| fsnotify_modify(victim); |
| |
| /** |
| * Drop reference from initial sysfs_get_dentry(). |
| */ |
| dput(victim); |
| res = 0; |
| } else |
| d_drop(victim); |
| |
| /** |
| * Drop the reference acquired from sysfs_get_dentry() above. |
| */ |
| dput(victim); |
| } |
| mutex_unlock(&dir->d_inode->i_mutex); |
| |
| return res; |
| } |
| </SOURCE> |
| |
| PCI-hotplug (drivers/pci/hotplug/pci_hotplug_core.c) is only user of |
| this function. I confirmed that dentry of /sys/bus/pci/slots/XXX/* |
| have negative d_count value. |
| |
| This patch removes unnecessary dput(). |
| |
| Signed-off-by: Hidetoshi Seto <seto.hidetoshi@jp.fujitsu.com> |
| Signed-off-by: Andrew Morton <akpm@osdl.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| fs/sysfs/file.c | 5 ----- |
| 1 file changed, 5 deletions(-) |
| |
| --- linux-2.6.17.13.orig/fs/sysfs/file.c |
| +++ linux-2.6.17.13/fs/sysfs/file.c |
| @@ -483,11 +483,6 @@ int sysfs_update_file(struct kobject * k |
| (victim->d_parent->d_inode == dir->d_inode)) { |
| victim->d_inode->i_mtime = CURRENT_TIME; |
| fsnotify_modify(victim); |
| - |
| - /** |
| - * Drop reference from initial sysfs_get_dentry(). |
| - */ |
| - dput(victim); |
| res = 0; |
| } else |
| d_drop(victim); |