mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
kobject: Cleanup kobject_rename and !CONFIG_SYSFS
It finally dawned on me what the clean fix to sysfs_rename_dir calling kobject_set_name is. Move the work into kobject_rename where it belongs. The callers serialize us anyway so this is safe. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Acked-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
030c1d2bfc
commit
0b4a4fea25
3 changed files with 17 additions and 10 deletions
|
@ -829,16 +829,12 @@ int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
|
||||||
if (!new_dentry)
|
if (!new_dentry)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
/* rename kobject and sysfs_dirent */
|
/* rename sysfs_dirent */
|
||||||
error = -ENOMEM;
|
error = -ENOMEM;
|
||||||
new_name = dup_name = kstrdup(new_name, GFP_KERNEL);
|
new_name = dup_name = kstrdup(new_name, GFP_KERNEL);
|
||||||
if (!new_name)
|
if (!new_name)
|
||||||
goto out_unlock;
|
goto out_unlock;
|
||||||
|
|
||||||
error = kobject_set_name(kobj, "%s", new_name);
|
|
||||||
if (error)
|
|
||||||
goto out_unlock;
|
|
||||||
|
|
||||||
dup_name = sd->s_name;
|
dup_name = sd->s_name;
|
||||||
sd->s_name = new_name;
|
sd->s_name = new_name;
|
||||||
|
|
||||||
|
|
|
@ -20,8 +20,6 @@
|
||||||
struct kobject;
|
struct kobject;
|
||||||
struct module;
|
struct module;
|
||||||
|
|
||||||
extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
|
|
||||||
__attribute__((format(printf, 2, 3)));
|
|
||||||
/* FIXME
|
/* FIXME
|
||||||
* The *owner field is no longer used, but leave around
|
* The *owner field is no longer used, but leave around
|
||||||
* until the tree gets cleaned up fully.
|
* until the tree gets cleaned up fully.
|
||||||
|
@ -149,7 +147,7 @@ static inline void sysfs_remove_dir(struct kobject *kobj)
|
||||||
|
|
||||||
static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
|
static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
|
||||||
{
|
{
|
||||||
return kobject_set_name(kobj, "%s", new_name);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int sysfs_move_dir(struct kobject *kobj,
|
static inline int sysfs_move_dir(struct kobject *kobj,
|
||||||
|
|
|
@ -397,6 +397,7 @@ int kobject_rename(struct kobject *kobj, const char *new_name)
|
||||||
{
|
{
|
||||||
int error = 0;
|
int error = 0;
|
||||||
const char *devpath = NULL;
|
const char *devpath = NULL;
|
||||||
|
const char *dup_name = NULL, *name;
|
||||||
char *devpath_string = NULL;
|
char *devpath_string = NULL;
|
||||||
char *envp[2];
|
char *envp[2];
|
||||||
|
|
||||||
|
@ -420,15 +421,27 @@ int kobject_rename(struct kobject *kobj, const char *new_name)
|
||||||
envp[0] = devpath_string;
|
envp[0] = devpath_string;
|
||||||
envp[1] = NULL;
|
envp[1] = NULL;
|
||||||
|
|
||||||
|
name = dup_name = kstrdup(new_name, GFP_KERNEL);
|
||||||
|
if (!name) {
|
||||||
|
error = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
error = sysfs_rename_dir(kobj, new_name);
|
error = sysfs_rename_dir(kobj, new_name);
|
||||||
|
if (error)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
/* Install the new kobject name */
|
||||||
|
dup_name = kobj->name;
|
||||||
|
kobj->name = name;
|
||||||
|
|
||||||
/* This function is mostly/only used for network interface.
|
/* This function is mostly/only used for network interface.
|
||||||
* Some hotplug package track interfaces by their name and
|
* Some hotplug package track interfaces by their name and
|
||||||
* therefore want to know when the name is changed by the user. */
|
* therefore want to know when the name is changed by the user. */
|
||||||
if (!error)
|
kobject_uevent_env(kobj, KOBJ_MOVE, envp);
|
||||||
kobject_uevent_env(kobj, KOBJ_MOVE, envp);
|
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
kfree(dup_name);
|
||||||
kfree(devpath_string);
|
kfree(devpath_string);
|
||||||
kfree(devpath);
|
kfree(devpath);
|
||||||
kobject_put(kobj);
|
kobject_put(kobj);
|
||||||
|
|
Loading…
Reference in a new issue