aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kobject.txt4
-rw-r--r--drivers/base/core.c5
-rw-r--r--include/linux/sysfs.h4
-rw-r--r--lib/kobject.c18
4 files changed, 17 insertions, 14 deletions
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt
index 51a8021ee532..f5d2aad65a67 100644
--- a/Documentation/kobject.txt
+++ b/Documentation/kobject.txt
@@ -118,6 +118,10 @@ the name of the kobject, call kobject_rename():
118 118
119 int kobject_rename(struct kobject *kobj, const char *new_name); 119 int kobject_rename(struct kobject *kobj, const char *new_name);
120 120
121Note kobject_rename does perform any locking or have a solid notion of
122what names are valid so the provide must provide their own sanity checking
123and serialization.
124
121There is a function called kobject_set_name() but that is legacy cruft and 125There is a function called kobject_set_name() but that is legacy cruft and
122is being removed. If your code needs to call this function, it is 126is being removed. If your code needs to call this function, it is
123incorrect and needs to be fixed. 127incorrect and needs to be fixed.
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 9649d1c422a4..8c2cc2648f5a 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -1327,6 +1327,11 @@ EXPORT_SYMBOL_GPL(device_destroy);
1327 * device_rename - renames a device 1327 * device_rename - renames a device
1328 * @dev: the pointer to the struct device to be renamed 1328 * @dev: the pointer to the struct device to be renamed
1329 * @new_name: the new name of the device 1329 * @new_name: the new name of the device
1330 *
1331 * It is the responsibility of the caller to provide mutual
1332 * exclusion between two different calls of device_rename
1333 * on the same device to ensure that new_name is valid and
1334 * won't conflict with other devices.
1330 */ 1335 */
1331int device_rename(struct device *dev, char *new_name) 1336int device_rename(struct device *dev, char *new_name)
1332{ 1337{
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
index b330e289d71f..39924a962207 100644
--- a/include/linux/sysfs.h
+++ b/include/linux/sysfs.h
@@ -20,6 +20,8 @@
20struct kobject; 20struct kobject;
21struct module; 21struct module;
22 22
23extern int kobject_set_name(struct kobject *kobj, const char *name, ...)
24 __attribute__((format(printf, 2, 3)));
23/* FIXME 25/* FIXME
24 * The *owner field is no longer used, but leave around 26 * The *owner field is no longer used, but leave around
25 * until the tree gets cleaned up fully. 27 * until the tree gets cleaned up fully.
@@ -147,7 +149,7 @@ static inline void sysfs_remove_dir(struct kobject *kobj)
147 149
148static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name) 150static inline int sysfs_rename_dir(struct kobject *kobj, const char *new_name)
149{ 151{
150 return 0; 152 return kobject_set_name(kobj, "%s", new_name);
151} 153}
152 154
153static inline int sysfs_move_dir(struct kobject *kobj, 155static inline int sysfs_move_dir(struct kobject *kobj,
diff --git a/lib/kobject.c b/lib/kobject.c
index fbf0ae282376..ae6bb900bfb6 100644
--- a/lib/kobject.c
+++ b/lib/kobject.c
@@ -387,6 +387,11 @@ EXPORT_SYMBOL_GPL(kobject_init_and_add);
387 * kobject_rename - change the name of an object 387 * kobject_rename - change the name of an object
388 * @kobj: object in question. 388 * @kobj: object in question.
389 * @new_name: object's new name 389 * @new_name: object's new name
390 *
391 * It is the responsibility of the caller to provide mutual
392 * exclusion between two different calls of kobject_rename
393 * on the same kobject and to ensure that new_name is valid and
394 * won't conflict with other kobjects.
390 */ 395 */
391int kobject_rename(struct kobject *kobj, const char *new_name) 396int kobject_rename(struct kobject *kobj, const char *new_name)
392{ 397{
@@ -401,19 +406,6 @@ int kobject_rename(struct kobject *kobj, const char *new_name)
401 if (!kobj->parent) 406 if (!kobj->parent)
402 return -EINVAL; 407 return -EINVAL;
403 408
404 /* see if this name is already in use */
405 if (kobj->kset) {
406 struct kobject *temp_kobj;
407 temp_kobj = kset_find_obj(kobj->kset, new_name);
408 if (temp_kobj) {
409 printk(KERN_WARNING "kobject '%s' cannot be renamed "
410 "to '%s' as '%s' is already in existence.\n",
411 kobject_name(kobj), new_name, new_name);
412 kobject_put(temp_kobj);
413 return -EINVAL;
414 }
415 }
416
417 devpath = kobject_get_path(kobj, GFP_KERNEL); 409 devpath = kobject_get_path(kobj, GFP_KERNEL);
418 if (!devpath) { 410 if (!devpath) {
419 error = -ENOMEM; 411 error = -ENOMEM;