提交 890ece16 编写于 作者: T Tejun Heo 提交者: Greg Kroah-Hartman

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: NTejun Heo <tj@kernel.org>
Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
上级 5d0e26bb
...@@ -932,20 +932,27 @@ void sysfs_remove_dir(struct kobject *kobj) ...@@ -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; int error;
mutex_lock(&sysfs_mutex); mutex_lock(&sysfs_mutex);
error = 0; 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)) (strcmp(sd->s_name, new_name) == 0))
goto out; /* nothing to rename */ goto out; /* nothing to rename */
error = -EEXIST; 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; goto out;
/* rename sysfs_dirent */ /* rename sysfs_dirent */
...@@ -963,11 +970,11 @@ int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd, ...@@ -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. * Move to the appropriate place in the appropriate directories rbtree.
*/ */
sysfs_unlink_sibling(sd); sysfs_unlink_sibling(sd);
sysfs_get(new_parent_sd); sysfs_get(new_parent);
sysfs_put(sd->s_parent); sysfs_put(sd->s_parent);
sd->s_ns = new_ns; sd->s_ns = new_ns;
sd->s_hash = sysfs_name_hash(sd->s_name, sd->s_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); sysfs_link_sibling(sd);
error = 0; error = 0;
...@@ -981,7 +988,7 @@ int sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name, ...@@ -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; 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, 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, ...@@ -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_sd = new_parent_kobj && new_parent_kobj->sd ?
new_parent_kobj->sd : &sysfs_root; 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, ...@@ -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) if (sd->s_symlink.target_sd->s_dir.kobj != targ)
goto out; goto out;
result = sysfs_rename(sd, parent_sd, new, new_ns); result = kernfs_rename_ns(sd, parent_sd, new, new_ns);
out: out:
sysfs_put(sd); sysfs_put(sd);
......
...@@ -185,9 +185,6 @@ void release_sysfs_dirent(struct sysfs_dirent *sd); ...@@ -185,9 +185,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);
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) static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd)
{ {
if (sd) { if (sd) {
......
...@@ -20,6 +20,8 @@ struct sysfs_dirent *kernfs_create_link(struct sysfs_dirent *parent, ...@@ -20,6 +20,8 @@ struct sysfs_dirent *kernfs_create_link(struct sysfs_dirent *parent,
void kernfs_remove(struct sysfs_dirent *sd); void kernfs_remove(struct sysfs_dirent *sd);
int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name, int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name,
const void *ns); 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 */ #else /* CONFIG_SYSFS */
...@@ -34,6 +36,11 @@ static inline int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, ...@@ -34,6 +36,11 @@ static inline int kernfs_remove_by_name_ns(struct sysfs_dirent *parent,
const char *name, const void *ns) const char *name, const void *ns)
{ return -ENOSYS; } { 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 */ #endif /* CONFIG_SYSFS */
static inline int kernfs_remove_by_name(struct sysfs_dirent *parent, static inline int kernfs_remove_by_name(struct sysfs_dirent *parent,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册