提交 0b4a4fea 编写于 作者: E Eric W. Biederman 提交者: Greg Kroah-Hartman

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: NEric W. Biederman <ebiederm@xmission.com>
Acked-by: NTejun Heo <tj@kernel.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@suse.de>
上级 030c1d2b
...@@ -829,16 +829,12 @@ int sysfs_rename_dir(struct kobject * kobj, const char *new_name) ...@@ -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 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册