diff options
Diffstat (limited to 'fs/sysfs/symlink.c')
| -rw-r--r-- | fs/sysfs/symlink.c | 6 | 
1 files changed, 4 insertions, 2 deletions
| diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c index e38d6338a20..d2eac3ceed5 100644 --- a/fs/sysfs/symlink.c +++ b/fs/sysfs/symlink.c @@ -66,6 +66,7 @@ static int sysfs_add_link(struct dentry * parent, const char * name, struct kobj  	if (!error)  		return 0; +	kobject_put(target);  	kfree(sl->link_name);  exit2:  	kfree(sl); @@ -82,12 +83,13 @@ exit1:  int sysfs_create_link(struct kobject * kobj, struct kobject * target, const char * name)  {  	struct dentry * dentry = kobj->dentry; -	int error = 0; +	int error = -EEXIST;  	BUG_ON(!kobj || !kobj->dentry || !name);  	mutex_lock(&dentry->d_inode->i_mutex); -	error = sysfs_add_link(dentry, name, target); +	if (!sysfs_dirent_exist(dentry->d_fsdata, name)) +		error = sysfs_add_link(dentry, name, target);  	mutex_unlock(&dentry->d_inode->i_mutex);  	return error;  } | 
