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

Commit 879f40d1 authored by Tejun Heo's avatar Tejun Heo Committed by Greg Kroah-Hartman
Browse files

sysfs, kernfs: introduce kernfs_remove[_by_name[_ns]]()



Introduce kernfs removal interfaces - kernfs_remove() and
kernfs_remove_by_name[_ns]().

These are just renames of sysfs_remove() and sysfs_hash_and_remove().
No functional changes.

v2: Dummy kernfs_remove_by_name_ns() for !CONFIG_SYSFS updated to
    return -ENOSYS instead of 0.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b8441ed2
Loading
Loading
Loading
Loading
+10 −10
Original line number Diff line number Diff line
@@ -829,7 +829,7 @@ static struct sysfs_dirent *sysfs_next_descendant_post(struct sysfs_dirent *pos,
	return pos->s_parent;
}

static void __sysfs_remove(struct sysfs_addrm_cxt *acxt,
static void __kernfs_remove(struct sysfs_addrm_cxt *acxt,
			    struct sysfs_dirent *sd)
{
	struct sysfs_dirent *pos, *next;
@@ -849,22 +849,22 @@ static void __sysfs_remove(struct sysfs_addrm_cxt *acxt,
}

/**
 * sysfs_remove - remove a sysfs_dirent recursively
 * kernfs_remove - remove a sysfs_dirent recursively
 * @sd: the sysfs_dirent to remove
 *
 * Remove @sd along with all its subdirectories and files.
 */
void sysfs_remove(struct sysfs_dirent *sd)
void kernfs_remove(struct sysfs_dirent *sd)
{
	struct sysfs_addrm_cxt acxt;

	sysfs_addrm_start(&acxt);
	__sysfs_remove(&acxt, sd);
	__kernfs_remove(&acxt, sd);
	sysfs_addrm_finish(&acxt);
}

/**
 * sysfs_hash_and_remove - find a sysfs_dirent by name and remove it
 * kernfs_remove_by_name_ns - find a sysfs_dirent by name and remove it
 * @dir_sd: parent of the target
 * @name: name of the sysfs_dirent to remove
 * @ns: namespace tag of the sysfs_dirent to remove
@@ -872,7 +872,7 @@ void sysfs_remove(struct sysfs_dirent *sd)
 * Look for the sysfs_dirent with @name and @ns under @dir_sd and remove
 * it.  Returns 0 on success, -ENOENT if such entry doesn't exist.
 */
int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,
int kernfs_remove_by_name_ns(struct sysfs_dirent *dir_sd, const char *name,
			     const void *ns)
{
	struct sysfs_addrm_cxt acxt;
@@ -888,7 +888,7 @@ int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,

	sd = sysfs_find_dirent(dir_sd, name, ns);
	if (sd)
		__sysfs_remove(&acxt, sd);
		__kernfs_remove(&acxt, sd);

	sysfs_addrm_finish(&acxt);

@@ -928,7 +928,7 @@ void sysfs_remove_dir(struct kobject *kobj)

	if (sd) {
		WARN_ON_ONCE(sysfs_type(sd) != SYSFS_DIR);
		sysfs_remove(sd);
		kernfs_remove(sd);
	}
}

+3 −3
Original line number Diff line number Diff line
@@ -952,7 +952,7 @@ void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr,
{
	struct sysfs_dirent *dir_sd = kobj->sd;

	sysfs_hash_and_remove(dir_sd, attr->name, ns);
	kernfs_remove_by_name_ns(dir_sd, attr->name, ns);
}
EXPORT_SYMBOL_GPL(sysfs_remove_file_ns);

@@ -980,7 +980,7 @@ void sysfs_remove_file_from_group(struct kobject *kobj,
	else
		dir_sd = sysfs_get(kobj->sd);
	if (dir_sd) {
		sysfs_hash_and_remove(dir_sd, attr->name, NULL);
		kernfs_remove_by_name(dir_sd, attr->name);
		sysfs_put(dir_sd);
	}
}
@@ -1008,7 +1008,7 @@ EXPORT_SYMBOL_GPL(sysfs_create_bin_file);
void sysfs_remove_bin_file(struct kobject *kobj,
			   const struct bin_attribute *attr)
{
	sysfs_hash_and_remove(kobj->sd, attr->attr.name, NULL);
	kernfs_remove_by_name(kobj->sd, attr->attr.name);
}
EXPORT_SYMBOL_GPL(sysfs_remove_bin_file);

+7 −8
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ static void remove_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,

	if (grp->attrs)
		for (attr = grp->attrs; *attr; attr++)
			sysfs_hash_and_remove(dir_sd, (*attr)->name, NULL);
			kernfs_remove_by_name(dir_sd, (*attr)->name);
	if (grp->bin_attrs)
		for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++)
			sysfs_remove_bin_file(kobj, *bin_attr);
@@ -49,8 +49,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
			 * re-adding (if required) the file.
			 */
			if (update)
				sysfs_hash_and_remove(dir_sd, (*attr)->name,
						      NULL);
				kernfs_remove_by_name(dir_sd, (*attr)->name);
			if (grp->is_visible) {
				mode = grp->is_visible(kobj, *attr, i);
				if (!mode)
@@ -111,7 +110,7 @@ static int internal_create_group(struct kobject *kobj, int update,
	error = create_files(sd, kobj, grp, update);
	if (error) {
		if (grp->name)
			sysfs_remove(sd);
			kernfs_remove(sd);
	}
	sysfs_put(sd);
	return error;
@@ -219,7 +218,7 @@ void sysfs_remove_group(struct kobject *kobj,

	remove_files(sd, kobj, grp);
	if (grp->name)
		sysfs_remove(sd);
		kernfs_remove(sd);

	sysfs_put(sd);
}
@@ -270,7 +269,7 @@ int sysfs_merge_group(struct kobject *kobj,
		error = sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
	if (error) {
		while (--i >= 0)
			sysfs_hash_and_remove(dir_sd, (*--attr)->name, NULL);
			kernfs_remove_by_name(dir_sd, (*--attr)->name);
	}
	sysfs_put(dir_sd);

@@ -292,7 +291,7 @@ void sysfs_unmerge_group(struct kobject *kobj,
	dir_sd = sysfs_get_dirent(kobj->sd, grp->name);
	if (dir_sd) {
		for (attr = grp->attrs; *attr; ++attr)
			sysfs_hash_and_remove(dir_sd, (*attr)->name, NULL);
			kernfs_remove_by_name(dir_sd, (*attr)->name);
		sysfs_put(dir_sd);
	}
}
@@ -335,7 +334,7 @@ void sysfs_remove_link_from_group(struct kobject *kobj, const char *group_name,

	dir_sd = sysfs_get_dirent(kobj->sd, group_name);
	if (dir_sd) {
		sysfs_hash_and_remove(dir_sd, link_name, NULL);
		kernfs_remove_by_name(dir_sd, link_name);
		sysfs_put(dir_sd);
	}
}
+2 −2
Original line number Diff line number Diff line
@@ -153,7 +153,7 @@ void sysfs_delete_link(struct kobject *kobj, struct kobject *targ,
	if (targ->sd && (kobj->sd->s_flags & SYSFS_FLAG_NS))
		ns = targ->sd->s_ns;
	spin_unlock(&sysfs_symlink_target_lock);
	sysfs_hash_and_remove(kobj->sd, name, ns);
	kernfs_remove_by_name_ns(kobj->sd, name, ns);
}

/**
@@ -170,7 +170,7 @@ void sysfs_remove_link(struct kobject *kobj, const char *name)
	else
		parent_sd = kobj->sd;

	sysfs_hash_and_remove(parent_sd, name, NULL);
	kernfs_remove_by_name(parent_sd, name);
}
EXPORT_SYMBOL_GPL(sysfs_remove_link);

+0 −3
Original line number Diff line number Diff line
@@ -173,9 +173,6 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
		    struct sysfs_dirent *parent_sd);
int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
		  struct sysfs_dirent *parent_sd);
void sysfs_remove(struct sysfs_dirent *sd);
int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,
			  const void *ns);
void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt);

struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
Loading