lkml.org 
[lkml]   [2013]   [Nov]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 05/39] sysfs, kernfs: introduce kernfs_rename[_ns]()
    Date
    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>
    ---
    fs/sysfs/dir.c | 23 +++++++++++++++--------
    fs/sysfs/symlink.c | 2 +-
    fs/sysfs/sysfs.h | 3 ---
    include/linux/kernfs.h | 7 +++++++
    4 files changed, 23 insertions(+), 12 deletions(-)

    diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    index 3fcaf08..3eb86b3 100644
    --- a/fs/sysfs/dir.c
    +++ b/fs/sysfs/dir.c
    @@ -927,20 +927,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 */
    @@ -958,11 +965,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;
    @@ -976,7 +983,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,
    @@ -989,7 +996,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);
    }

    /* Relationship between s_mode and the DT_xxx types */
    diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
    index 0f46bd3..f9d6056 100644
    --- a/fs/sysfs/symlink.c
    +++ b/fs/sysfs/symlink.c
    @@ -225,7 +225,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);
    diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
    index 3b796e2..35561a8 100644
    --- a/fs/sysfs/sysfs.h
    +++ b/fs/sysfs/sysfs.h
    @@ -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) {
    diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h
    index fe6290d..803d960 100644
    --- a/include/linux/kernfs.h
    +++ b/include/linux/kernfs.h
    @@ -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,
    --
    1.8.3.1


    \
     
     \ /
      Last update: 2013-11-03 11:21    [W:4.289 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site