diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-07 22:22:26 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-07 22:22:26 -0500 |
commit | f2aca47dc3c2d0c2d5dbd972558557e74232bbce (patch) | |
tree | eae58f599a25a1f3ab41bf616a2b7c4b3c6e2277 /drivers/base/class.c | |
parent | 7677ced48e2bbbb8d847d34f37e5d96d2b0e41e4 (diff) | |
parent | b592fcfe7f06c15ec11774b5be7ce0de3aa86e73 (diff) |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6: (28 commits)
sysfs: Shadow directory support
Driver Core: Increase the default timeout value of the firmware subsystem
Driver core: allow to delay the uevent at device creation time
Driver core: add device_type to struct device
Driver core: add uevent vars for devices of a class
SYSFS: Fix missing include of list.h in sysfs.h
HOWTO: Add a reference to Harbison and Steele
sysfs: error handling in sysfs, fill_read_buffer()
kobject: kobject_put cleanup
sysfs: kobject_put cleanup
sysfs: suppress lockdep warnings
Driver core: fix race in sysfs between sysfs_remove_file() and read()/write()
driver core: Change function call order in device_bind_driver().
driver core: Don't stop probing on ->probe errors.
driver core fixes: device_register() retval check in platform.c
driver core fixes: make_class_name() retval checks
/sys/modules/*/holders
USB: add the sysfs driver name to all modules
SERIO: add the sysfs driver name to all modules
PCI: add the sysfs driver name to all modules
...
Diffstat (limited to 'drivers/base/class.c')
-rw-r--r-- | drivers/base/class.c | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/base/class.c b/drivers/base/class.c index 8bf2ca2e56b5..96def1ddba19 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c | |||
@@ -364,7 +364,7 @@ char *make_class_name(const char *name, struct kobject *kobj) | |||
364 | 364 | ||
365 | class_name = kmalloc(size, GFP_KERNEL); | 365 | class_name = kmalloc(size, GFP_KERNEL); |
366 | if (!class_name) | 366 | if (!class_name) |
367 | return ERR_PTR(-ENOMEM); | 367 | return NULL; |
368 | 368 | ||
369 | strcpy(class_name, name); | 369 | strcpy(class_name, name); |
370 | strcat(class_name, ":"); | 370 | strcat(class_name, ":"); |
@@ -411,8 +411,11 @@ static int make_deprecated_class_device_links(struct class_device *class_dev) | |||
411 | return 0; | 411 | return 0; |
412 | 412 | ||
413 | class_name = make_class_name(class_dev->class->name, &class_dev->kobj); | 413 | class_name = make_class_name(class_dev->class->name, &class_dev->kobj); |
414 | error = sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, | 414 | if (class_name) |
415 | class_name); | 415 | error = sysfs_create_link(&class_dev->dev->kobj, |
416 | &class_dev->kobj, class_name); | ||
417 | else | ||
418 | error = -ENOMEM; | ||
416 | kfree(class_name); | 419 | kfree(class_name); |
417 | return error; | 420 | return error; |
418 | } | 421 | } |
@@ -425,7 +428,8 @@ static void remove_deprecated_class_device_links(struct class_device *class_dev) | |||
425 | return; | 428 | return; |
426 | 429 | ||
427 | class_name = make_class_name(class_dev->class->name, &class_dev->kobj); | 430 | class_name = make_class_name(class_dev->class->name, &class_dev->kobj); |
428 | sysfs_remove_link(&class_dev->dev->kobj, class_name); | 431 | if (class_name) |
432 | sysfs_remove_link(&class_dev->dev->kobj, class_name); | ||
429 | kfree(class_name); | 433 | kfree(class_name); |
430 | } | 434 | } |
431 | #else | 435 | #else |
@@ -863,9 +867,12 @@ int class_device_rename(struct class_device *class_dev, char *new_name) | |||
863 | if (class_dev->dev) { | 867 | if (class_dev->dev) { |
864 | new_class_name = make_class_name(class_dev->class->name, | 868 | new_class_name = make_class_name(class_dev->class->name, |
865 | &class_dev->kobj); | 869 | &class_dev->kobj); |
866 | sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, | 870 | if (new_class_name) |
867 | new_class_name); | 871 | sysfs_create_link(&class_dev->dev->kobj, |
868 | sysfs_remove_link(&class_dev->dev->kobj, old_class_name); | 872 | &class_dev->kobj, new_class_name); |
873 | if (old_class_name) | ||
874 | sysfs_remove_link(&class_dev->dev->kobj, | ||
875 | old_class_name); | ||
869 | } | 876 | } |
870 | #endif | 877 | #endif |
871 | class_device_put(class_dev); | 878 | class_device_put(class_dev); |