lkml.org 
[lkml]   [2007]   [Sep]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 13/15] sysfs: move sysfs_dirent->s_children into sysfs_dirent->s_dir
    Date
    From
    Children list head is only meaninful for directory nodes.  Move it
    into s_dir. This doesn't save any space currently but it will with
    further changes.

    Signed-off-by: Tejun Heo <htejun@gmail.com>
    ---
    fs/sysfs/dir.c | 17 +++++++++--------
    fs/sysfs/inode.c | 2 +-
    fs/sysfs/sysfs.h | 3 ++-
    3 files changed, 12 insertions(+), 10 deletions(-)

    diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    index 7500407..b81744b 100644
    --- a/fs/sysfs/dir.c
    +++ b/fs/sysfs/dir.c
    @@ -26,7 +26,7 @@ static DEFINE_IDA(sysfs_ino_ida);
    * @sd: sysfs_dirent of interest
    *
    * Link @sd into its sibling list which starts from
    - * sd->s_parent->s_children.
    + * sd->s_parent->s_dir.children.
    *
    * Locking:
    * mutex_lock(sysfs_mutex)
    @@ -40,9 +40,9 @@ static void sysfs_link_sibling(struct sysfs_dirent *sd)

    /* Store directory entries in order by ino. This allows
    * readdir to properly restart without having to add a
    - * cursor into the s_children list.
    + * cursor into the s_dir.children list.
    */
    - for (pos = &parent_sd->s_children; *pos; pos = &(*pos)->s_sibling) {
    + for (pos = &parent_sd->s_dir.children; *pos; pos = &(*pos)->s_sibling) {
    if (sd->s_ino < (*pos)->s_ino)
    break;
    }
    @@ -55,7 +55,7 @@ static void sysfs_link_sibling(struct sysfs_dirent *sd)
    * @sd: sysfs_dirent of interest
    *
    * Unlink @sd from its sibling list which starts from
    - * sd->s_parent->s_children.
    + * sd->s_parent->s_dir.children.
    *
    * Locking:
    * mutex_lock(sysfs_mutex)
    @@ -64,7 +64,8 @@ static void sysfs_unlink_sibling(struct sysfs_dirent *sd)
    {
    struct sysfs_dirent **pos;

    - for (pos = &sd->s_parent->s_children; *pos; pos = &(*pos)->s_sibling) {
    + for (pos = &sd->s_parent->s_dir.children; *pos;
    + pos = &(*pos)->s_sibling) {
    if (*pos == sd) {
    *pos = sd->s_sibling;
    sd->s_sibling = NULL;
    @@ -566,7 +567,7 @@ struct sysfs_dirent *sysfs_find_dirent(struct sysfs_dirent *parent_sd,
    {
    struct sysfs_dirent *sd;

    - for (sd = parent_sd->s_children; sd; sd = sd->s_sibling)
    + for (sd = parent_sd->s_dir.children; sd; sd = sd->s_sibling)
    if (!strcmp(sd->s_name, name))
    return sd;
    return NULL;
    @@ -718,7 +719,7 @@ static void __sysfs_remove_dir(struct sysfs_dirent *dir_sd)

    pr_debug("sysfs %s: removing dir\n", dir_sd->s_name);
    sysfs_addrm_start(&acxt, dir_sd);
    - pos = &dir_sd->s_children;
    + pos = &dir_sd->s_dir.children;
    while (*pos) {
    struct sysfs_dirent *sd = *pos;

    @@ -918,7 +919,7 @@ static int sysfs_readdir(struct file * filp, void * dirent, filldir_t filldir)
    mutex_lock(&sysfs_mutex);

    /* Skip the dentries we have already reported */
    - pos = parent_sd->s_children;
    + pos = parent_sd->s_dir.children;
    while (pos && (filp->f_pos > pos->s_ino))
    pos = pos->s_sibling;

    diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
    index c40fb9f..2210cf0 100644
    --- a/fs/sysfs/inode.c
    +++ b/fs/sysfs/inode.c
    @@ -127,7 +127,7 @@ static int sysfs_count_nlink(struct sysfs_dirent *sd)
    struct sysfs_dirent *child;
    int nr = 0;

    - for (child = sd->s_children; child; child = child->s_sibling)
    + for (child = sd->s_dir.children; child; child = child->s_sibling)
    if (sysfs_type(child) == SYSFS_DIR)
    nr++;

    diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
    index 60405a6..42b0327 100644
    --- a/fs/sysfs/sysfs.h
    +++ b/fs/sysfs/sysfs.h
    @@ -1,6 +1,8 @@
    /* type-specific structures for sysfs_dirent->s_* union members */
    struct sysfs_elem_dir {
    struct kobject *kobj;
    + /* children list starts here and goes through sd->s_sibling */
    + struct sysfs_dirent *children;
    };

    struct sysfs_elem_symlink {
    @@ -28,7 +30,6 @@ struct sysfs_dirent {
    atomic_t s_active;
    struct sysfs_dirent *s_parent;
    struct sysfs_dirent *s_sibling;
    - struct sysfs_dirent *s_children;
    const char *s_name;

    union {
    --
    1.5.0.3

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-09-20 09:13    [W:4.238 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site