Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b4a4fea authored by Eric W. Biederman's avatar Eric W. Biederman Committed by Greg Kroah-Hartman
Browse files

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: default avatarEric W. Biederman <ebiederm@xmission.com>
Acked-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 030c1d2b
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -829,16 +829,12 @@ int sysfs_rename_dir(struct kobject * kobj, const char *new_name)
	if (!new_dentry)
		goto out_unlock;

	/* rename kobject and sysfs_dirent */
	/* rename sysfs_dirent */
	error = -ENOMEM;
	new_name = dup_name = kstrdup(new_name, GFP_KERNEL);
	if (!new_name)
		goto out_unlock;

	error = kobject_set_name(kobj, "%s", new_name);
	if (error)
		goto out_unlock;

	dup_name = sd->s_name;
	sd->s_name = new_name;

+1 −3
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@
struct kobject;
struct module;

extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
			    __attribute__((format(printf, 2, 3)));
/* FIXME
 * The *owner field is no longer used, but leave around
 * 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)
{
	return kobject_set_name(kobj, "%s", new_name);
	return 0;
}

static inline int sysfs_move_dir(struct kobject *kobj,
+15 −2
Original line number Diff line number Diff line
@@ -397,6 +397,7 @@ int kobject_rename(struct kobject *kobj, const char *new_name)
{
	int error = 0;
	const char *devpath = NULL;
	const char *dup_name = NULL, *name;
	char *devpath_string = NULL;
	char *envp[2];

@@ -420,15 +421,27 @@ int kobject_rename(struct kobject *kobj, const char *new_name)
	envp[0] = devpath_string;
	envp[1] = NULL;

	name = dup_name = kstrdup(new_name, GFP_KERNEL);
	if (!name) {
		error = -ENOMEM;
		goto out;
	}

	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.
	 * Some hotplug package track interfaces by their name and
	 * therefore want to know when the name is changed by the user. */
	if (!error)
	kobject_uevent_env(kobj, KOBJ_MOVE, envp);

out:
	kfree(dup_name);
	kfree(devpath_string);
	kfree(devpath);
	kobject_put(kobj);