sysfs, kernfs: introduce kernfs_rename[_ns]()
Introduce kernfs rename interface, krenfs_rename[_ns](). This is just rename of sysfs_rename(). No functional changes. Function comment is added to kernfs_rename_ns() and @new_parent_sd is renamed to @new_parent for consistency with other kernfs interfaces. v2: Dummy implementation for !CONFIG_SYSFS updated to return -ENOSYS. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
5d0e26bb59
Коммит
890ece160c
|
@ -932,20 +932,27 @@ void sysfs_remove_dir(struct kobject *kobj)
|
|||
}
|
||||
}
|
||||
|
||||
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
||||
const char *new_name, const void *new_ns)
|
||||
/**
|
||||
* kernfs_rename_ns - move and rename a kernfs_node
|
||||
* @sd: target node
|
||||
* @new_parent: new parent to put @sd under
|
||||
* @new_name: new name
|
||||
* @new_ns: new namespace tag
|
||||
*/
|
||||
int kernfs_rename_ns(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent,
|
||||
const char *new_name, const void *new_ns)
|
||||
{
|
||||
int error;
|
||||
|
||||
mutex_lock(&sysfs_mutex);
|
||||
|
||||
error = 0;
|
||||
if ((sd->s_parent == new_parent_sd) && (sd->s_ns == new_ns) &&
|
||||
if ((sd->s_parent == new_parent) && (sd->s_ns == new_ns) &&
|
||||
(strcmp(sd->s_name, new_name) == 0))
|
||||
goto out; /* nothing to rename */
|
||||
|
||||
error = -EEXIST;
|
||||
if (sysfs_find_dirent(new_parent_sd, new_name, new_ns))
|
||||
if (sysfs_find_dirent(new_parent, new_name, new_ns))
|
||||
goto out;
|
||||
|
||||
/* rename sysfs_dirent */
|
||||
|
@ -963,11 +970,11 @@ int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
|||
* Move to the appropriate place in the appropriate directories rbtree.
|
||||
*/
|
||||
sysfs_unlink_sibling(sd);
|
||||
sysfs_get(new_parent_sd);
|
||||
sysfs_get(new_parent);
|
||||
sysfs_put(sd->s_parent);
|
||||
sd->s_ns = new_ns;
|
||||
sd->s_hash = sysfs_name_hash(sd->s_name, sd->s_ns);
|
||||
sd->s_parent = new_parent_sd;
|
||||
sd->s_parent = new_parent;
|
||||
sysfs_link_sibling(sd);
|
||||
|
||||
error = 0;
|
||||
|
@ -981,7 +988,7 @@ int sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
|
|||
{
|
||||
struct sysfs_dirent *parent_sd = kobj->sd->s_parent;
|
||||
|
||||
return sysfs_rename(kobj->sd, parent_sd, new_name, new_ns);
|
||||
return kernfs_rename_ns(kobj->sd, parent_sd, new_name, new_ns);
|
||||
}
|
||||
|
||||
int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj,
|
||||
|
@ -994,7 +1001,7 @@ int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj,
|
|||
new_parent_sd = new_parent_kobj && new_parent_kobj->sd ?
|
||||
new_parent_kobj->sd : &sysfs_root;
|
||||
|
||||
return sysfs_rename(sd, new_parent_sd, sd->s_name, new_ns);
|
||||
return kernfs_rename_ns(sd, new_parent_sd, sd->s_name, new_ns);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -226,7 +226,7 @@ int sysfs_rename_link_ns(struct kobject *kobj, struct kobject *targ,
|
|||
if (sd->s_symlink.target_sd->s_dir.kobj != targ)
|
||||
goto out;
|
||||
|
||||
result = sysfs_rename(sd, parent_sd, new, new_ns);
|
||||
result = kernfs_rename_ns(sd, parent_sd, new, new_ns);
|
||||
|
||||
out:
|
||||
sysfs_put(sd);
|
||||
|
|
|
@ -185,9 +185,6 @@ void release_sysfs_dirent(struct sysfs_dirent *sd);
|
|||
int sysfs_create_subdir(struct kobject *kobj, const char *name,
|
||||
struct sysfs_dirent **p_sd);
|
||||
|
||||
int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
|
||||
const char *new_name, const void *new_ns);
|
||||
|
||||
static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd)
|
||||
{
|
||||
if (sd) {
|
||||
|
|
|
@ -20,6 +20,8 @@ struct sysfs_dirent *kernfs_create_link(struct sysfs_dirent *parent,
|
|||
void kernfs_remove(struct sysfs_dirent *sd);
|
||||
int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name,
|
||||
const void *ns);
|
||||
int kernfs_rename_ns(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent,
|
||||
const char *new_name, const void *new_ns);
|
||||
|
||||
#else /* CONFIG_SYSFS */
|
||||
|
||||
|
@ -34,6 +36,11 @@ static inline int kernfs_remove_by_name_ns(struct sysfs_dirent *parent,
|
|||
const char *name, const void *ns)
|
||||
{ return -ENOSYS; }
|
||||
|
||||
static inline int kernfs_rename_ns(struct sysfs_dirent *sd,
|
||||
struct sysfs_dirent *new_parent,
|
||||
const char *new_name, const void *new_ns)
|
||||
{ return -ENOSYS; }
|
||||
|
||||
#endif /* CONFIG_SYSFS */
|
||||
|
||||
static inline int kernfs_remove_by_name(struct sysfs_dirent *parent,
|
||||
|
|
Загрузка…
Ссылка в новой задаче