mirror of
https://github.com/torvalds/linux.git
synced 2024-12-31 23:31:29 +00:00
sysfs: introduce [__]sysfs_remove()
Given a sysfs_dirent, there is no reason to have multiple versions of removal functions. A function which removes the specified sysfs_dirent and its descendants is enough. This patch intorduces [__}sysfs_remove() which replaces all internal variations of removal functions. This will be the only removal function in the planned new sysfs_dirent based interface. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
bcdde7e221
commit
250f7c3fee
@ -545,7 +545,8 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
|
|||||||
* LOCKING:
|
* LOCKING:
|
||||||
* Determined by sysfs_addrm_start().
|
* Determined by sysfs_addrm_start().
|
||||||
*/
|
*/
|
||||||
void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
static void sysfs_remove_one(struct sysfs_addrm_cxt *acxt,
|
||||||
|
struct sysfs_dirent *sd)
|
||||||
{
|
{
|
||||||
struct sysfs_inode_attrs *ps_iattr;
|
struct sysfs_inode_attrs *ps_iattr;
|
||||||
|
|
||||||
@ -775,20 +776,6 @@ const struct inode_operations sysfs_dir_inode_operations = {
|
|||||||
.setxattr = sysfs_setxattr,
|
.setxattr = sysfs_setxattr,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void remove_dir(struct sysfs_dirent *sd)
|
|
||||||
{
|
|
||||||
struct sysfs_addrm_cxt acxt;
|
|
||||||
|
|
||||||
sysfs_addrm_start(&acxt);
|
|
||||||
sysfs_remove_one(&acxt, sd);
|
|
||||||
sysfs_addrm_finish(&acxt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void sysfs_remove_subdir(struct sysfs_dirent *sd)
|
|
||||||
{
|
|
||||||
remove_dir(sd);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct sysfs_dirent *sysfs_leftmost_descendant(struct sysfs_dirent *pos)
|
static struct sysfs_dirent *sysfs_leftmost_descendant(struct sysfs_dirent *pos)
|
||||||
{
|
{
|
||||||
struct sysfs_dirent *last;
|
struct sysfs_dirent *last;
|
||||||
@ -844,25 +831,36 @@ static struct sysfs_dirent *sysfs_next_descendant_post(struct sysfs_dirent *pos,
|
|||||||
return pos->s_parent;
|
return pos->s_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __sysfs_remove_dir(struct sysfs_dirent *dir_sd)
|
void __sysfs_remove(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
||||||
{
|
{
|
||||||
struct sysfs_addrm_cxt acxt;
|
|
||||||
struct sysfs_dirent *pos, *next;
|
struct sysfs_dirent *pos, *next;
|
||||||
|
|
||||||
if (!dir_sd)
|
if (!sd)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pr_debug("sysfs %s: removing dir\n", dir_sd->s_name);
|
pr_debug("sysfs %s: removing\n", sd->s_name);
|
||||||
sysfs_addrm_start(&acxt);
|
|
||||||
|
|
||||||
next = NULL;
|
next = NULL;
|
||||||
do {
|
do {
|
||||||
pos = next;
|
pos = next;
|
||||||
next = sysfs_next_descendant_post(pos, dir_sd);
|
next = sysfs_next_descendant_post(pos, sd);
|
||||||
if (pos)
|
if (pos)
|
||||||
sysfs_remove_one(&acxt, pos);
|
sysfs_remove_one(acxt, pos);
|
||||||
} while (next);
|
} while (next);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_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)
|
||||||
|
{
|
||||||
|
struct sysfs_addrm_cxt acxt;
|
||||||
|
|
||||||
|
sysfs_addrm_start(&acxt);
|
||||||
|
__sysfs_remove(&acxt, sd);
|
||||||
sysfs_addrm_finish(&acxt);
|
sysfs_addrm_finish(&acxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -882,7 +880,10 @@ void sysfs_remove_dir(struct kobject *kobj)
|
|||||||
kobj->sd = NULL;
|
kobj->sd = NULL;
|
||||||
spin_unlock(&sysfs_assoc_lock);
|
spin_unlock(&sysfs_assoc_lock);
|
||||||
|
|
||||||
__sysfs_remove_dir(sd);
|
if (sd) {
|
||||||
|
WARN_ON_ONCE(sysfs_type(sd) != SYSFS_DIR);
|
||||||
|
sysfs_remove(sd);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
||||||
|
@ -111,7 +111,7 @@ static int internal_create_group(struct kobject *kobj, int update,
|
|||||||
error = create_files(sd, kobj, grp, update);
|
error = create_files(sd, kobj, grp, update);
|
||||||
if (error) {
|
if (error) {
|
||||||
if (grp->name)
|
if (grp->name)
|
||||||
sysfs_remove_subdir(sd);
|
sysfs_remove(sd);
|
||||||
}
|
}
|
||||||
sysfs_put(sd);
|
sysfs_put(sd);
|
||||||
return error;
|
return error;
|
||||||
@ -219,7 +219,7 @@ void sysfs_remove_group(struct kobject *kobj,
|
|||||||
|
|
||||||
remove_files(sd, kobj, grp);
|
remove_files(sd, kobj, grp);
|
||||||
if (grp->name)
|
if (grp->name)
|
||||||
sysfs_remove_subdir(sd);
|
sysfs_remove(sd);
|
||||||
|
|
||||||
sysfs_put(sd);
|
sysfs_put(sd);
|
||||||
}
|
}
|
||||||
|
@ -330,7 +330,7 @@ int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,
|
|||||||
|
|
||||||
sd = sysfs_find_dirent(dir_sd, name, ns);
|
sd = sysfs_find_dirent(dir_sd, name, ns);
|
||||||
if (sd)
|
if (sd)
|
||||||
sysfs_remove_one(&acxt, sd);
|
__sysfs_remove(&acxt, sd);
|
||||||
|
|
||||||
sysfs_addrm_finish(&acxt);
|
sysfs_addrm_finish(&acxt);
|
||||||
|
|
||||||
|
@ -158,7 +158,8 @@ int __sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
|
|||||||
struct sysfs_dirent *parent_sd);
|
struct sysfs_dirent *parent_sd);
|
||||||
int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
|
int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd,
|
||||||
struct sysfs_dirent *parent_sd);
|
struct sysfs_dirent *parent_sd);
|
||||||
void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd);
|
void __sysfs_remove(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd);
|
||||||
|
void sysfs_remove(struct sysfs_dirent *sd);
|
||||||
void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt);
|
void sysfs_addrm_finish(struct sysfs_addrm_cxt *acxt);
|
||||||
|
|
||||||
struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
|
struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
|
||||||
@ -170,7 +171,6 @@ void release_sysfs_dirent(struct sysfs_dirent *sd);
|
|||||||
|
|
||||||
int sysfs_create_subdir(struct kobject *kobj, const char *name,
|
int sysfs_create_subdir(struct kobject *kobj, const char *name,
|
||||||
struct sysfs_dirent **p_sd);
|
struct sysfs_dirent **p_sd);
|
||||||
void sysfs_remove_subdir(struct sysfs_dirent *sd);
|
|
||||||
|
|
||||||
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
||||||
const char *new_name, const void *new_ns);
|
const char *new_name, const void *new_ns);
|
||||||
|
Loading…
Reference in New Issue
Block a user