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

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

driver core: Implement ns directory support for device classes.



device_del and device_rename were modified to use
sysfs_delete_link and sysfs_rename_link respectively to ensure
when these operations happen on devices whose classes
are in namespace directories they work properly.

Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
Signed-off-by: default avatarBenjamin Thery <benjamin.thery@bull.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 746edb7a
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
@@ -786,7 +786,7 @@ out_device:
out_busid:
	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
	    device_is_not_partition(dev))
		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
		sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj,
				  dev_name(dev));
#else
	/* link in the class directory pointing to the device */
@@ -804,7 +804,7 @@ out_busid:
	return 0;

out_busid:
	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
	sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
#endif

out_subsys:
@@ -832,13 +832,13 @@ static void device_remove_class_symlinks(struct device *dev)

	if (dev->kobj.parent != &dev->class->p->class_subsys.kobj &&
	    device_is_not_partition(dev))
		sysfs_remove_link(&dev->class->p->class_subsys.kobj,
		sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj,
				  dev_name(dev));
#else
	if (dev->parent && device_is_not_partition(dev))
		sysfs_remove_link(&dev->kobj, "device");

	sysfs_remove_link(&dev->class->p->class_subsys.kobj, dev_name(dev));
	sysfs_delete_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));
#endif

	sysfs_remove_link(&dev->kobj, "subsystem");
@@ -1624,6 +1624,14 @@ int device_rename(struct device *dev, char *new_name)
		goto out;
	}

#ifndef CONFIG_SYSFS_DEPRECATED
	if (dev->class) {
		error = sysfs_rename_link(&dev->class->p->class_subsys.kobj,
			&dev->kobj, old_device_name, new_name);
		if (error)
			goto out;
	}
#endif
	error = kobject_rename(&dev->kobj, new_name);
	if (error)
		goto out;
@@ -1638,11 +1646,6 @@ int device_rename(struct device *dev, char *new_name)
						  new_class_name);
		}
	}
#else
	if (dev->class) {
		error = sysfs_rename_link(&dev->class->p->class_subsys.kobj,
					  &dev->kobj, old_device_name, new_name);
	}
#endif

out: