sysfs: move sysfs_hash_and_remove() to fs/sysfs/dir.c
Most removal related logic is implemented in fs/sysfs/dir.c. Move sysfs_hash_and_remove() to fs/sysfs/dir.c so that __sysfs_remove() doesn't have to be public. This is pure relocation. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
baa97cb507
commit
7eed6ecb07
@@ -813,7 +813,8 @@ static struct sysfs_dirent *sysfs_next_descendant_post(struct sysfs_dirent *pos,
|
|||||||
return pos->s_parent;
|
return pos->s_parent;
|
||||||
}
|
}
|
||||||
|
|
||||||
void __sysfs_remove(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
|
static void __sysfs_remove(struct sysfs_addrm_cxt *acxt,
|
||||||
|
struct sysfs_dirent *sd)
|
||||||
{
|
{
|
||||||
struct sysfs_dirent *pos, *next;
|
struct sysfs_dirent *pos, *next;
|
||||||
|
|
||||||
@@ -846,6 +847,41 @@ void sysfs_remove(struct sysfs_dirent *sd)
|
|||||||
sysfs_addrm_finish(&acxt);
|
sysfs_addrm_finish(&acxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_hash_and_remove - 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
|
||||||
|
*
|
||||||
|
* 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,
|
||||||
|
const void *ns)
|
||||||
|
{
|
||||||
|
struct sysfs_addrm_cxt acxt;
|
||||||
|
struct sysfs_dirent *sd;
|
||||||
|
|
||||||
|
if (!dir_sd) {
|
||||||
|
WARN(1, KERN_WARNING "sysfs: can not remove '%s', no directory\n",
|
||||||
|
name);
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
sysfs_addrm_start(&acxt);
|
||||||
|
|
||||||
|
sd = sysfs_find_dirent(dir_sd, name, ns);
|
||||||
|
if (sd)
|
||||||
|
__sysfs_remove(&acxt, sd);
|
||||||
|
|
||||||
|
sysfs_addrm_finish(&acxt);
|
||||||
|
|
||||||
|
if (sd)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return -ENOENT;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sysfs_remove_dir - remove an object's directory.
|
* sysfs_remove_dir - remove an object's directory.
|
||||||
* @kobj: object.
|
* @kobj: object.
|
||||||
|
@@ -314,32 +314,6 @@ void sysfs_evict_inode(struct inode *inode)
|
|||||||
sysfs_put(sd);
|
sysfs_put(sd);
|
||||||
}
|
}
|
||||||
|
|
||||||
int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,
|
|
||||||
const void *ns)
|
|
||||||
{
|
|
||||||
struct sysfs_addrm_cxt acxt;
|
|
||||||
struct sysfs_dirent *sd;
|
|
||||||
|
|
||||||
if (!dir_sd) {
|
|
||||||
WARN(1, KERN_WARNING "sysfs: can not remove '%s', no directory\n",
|
|
||||||
name);
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
sysfs_addrm_start(&acxt);
|
|
||||||
|
|
||||||
sd = sysfs_find_dirent(dir_sd, name, ns);
|
|
||||||
if (sd)
|
|
||||||
__sysfs_remove(&acxt, sd);
|
|
||||||
|
|
||||||
sysfs_addrm_finish(&acxt);
|
|
||||||
|
|
||||||
if (sd)
|
|
||||||
return 0;
|
|
||||||
else
|
|
||||||
return -ENOENT;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sysfs_permission(struct inode *inode, int mask)
|
int sysfs_permission(struct inode *inode, int mask)
|
||||||
{
|
{
|
||||||
struct sysfs_dirent *sd;
|
struct sysfs_dirent *sd;
|
||||||
|
@@ -172,8 +172,9 @@ 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(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd);
|
|
||||||
void sysfs_remove(struct sysfs_dirent *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);
|
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,
|
||||||
@@ -218,8 +219,6 @@ int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry,
|
|||||||
struct kstat *stat);
|
struct kstat *stat);
|
||||||
int sysfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
int sysfs_setxattr(struct dentry *dentry, const char *name, const void *value,
|
||||||
size_t size, int flags);
|
size_t size, int flags);
|
||||||
int sysfs_hash_and_remove(struct sysfs_dirent *dir_sd, const char *name,
|
|
||||||
const void *ns);
|
|
||||||
int sysfs_inode_init(void);
|
int sysfs_inode_init(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user