• H
    sysfs: remove duplicated dput in sysfs_update_file · e4234451
    Hidetoshi Seto 提交于
    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: NHidetoshi Seto <seto.hidetoshi@jp.fujitsu.com>
    Acked-by: NManeesh Soni <maneesh@in.ibm.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
    e4234451
file.c 14.0 KB