X-Git-Url: http://ftp.safe.ca/?a=blobdiff_plain;f=lib%2Fkobject.c;h=0487d1f64806c645927fdc22ea4a5848f3d9ea5f;hb=c65b9145f40da99cad000f81823265dc70e5fcf9;hp=ae6bb900bfb60823e7ef71898154f5beb55cdd1c;hpb=030c1d2bfcc2187650fb975456ca0b61a5bb77f4;p=safe%2Fjmp%2Flinux-2.6 diff --git a/lib/kobject.c b/lib/kobject.c index ae6bb90..0487d1f 100644 --- a/lib/kobject.c +++ b/lib/kobject.c @@ -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); + kobject_uevent_env(kobj, KOBJ_MOVE, envp); out: + kfree(dup_name); kfree(devpath_string); kfree(devpath); kobject_put(kobj);