@@ -69,12 +69,19 @@ static int internal_create_group(struct kobject *kobj, int update,
return -EINVAL;
if (grp->name) {
- error = sysfs_create_subdir(kobj, grp->name, &sd);
- if (error)
- return error;
- } else
- sd = kobj->sd;
- sysfs_get(sd);
+ if (update) {
+ sd = sysfs_get_dirent(kobj->sd, grp->name);
+ if (!sd)
+ return -ENOENT;
+ } else {
+ error = sysfs_create_subdir(kobj, grp->name, &sd);
+ if (error)
+ return error;
+ sysfs_get(sd);
+ }
+ } else {
+ sd = sysfs_get(kobj->sd);
+ }
error = create_files(sd, kobj, grp, update);
if (error) {
if (grp->name)