lkml.org 
[lkml]   [2011]   [Dec]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 4/4] sysfs: Kill nlink counting.

    Tracking the number of subdirectories requires an extra field that increases
    the size of sysfs_dirent. nlinks are not particularly interesting for sysfs
    and the nlink counts are wrong when network namespaces are involved so stop
    counting them, and always return nlink == 1. Userspace already knows that
    directories with nlink == 1 have an nlink count they can't use to count
    subdirectories.

    This reduces the size of sysfs_dirent by 8 bytes on 64bit platforms.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    ---
    fs/sysfs/dir.c | 6 ------
    fs/sysfs/inode.c | 3 ---
    fs/sysfs/sysfs.h | 1 -
    3 files changed, 0 insertions(+), 10 deletions(-)

    diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    index 0589c9a..ea64d01 100644
    --- a/fs/sysfs/dir.c
    +++ b/fs/sysfs/dir.c
    @@ -91,9 +91,6 @@ static int sysfs_link_sibling(struct sysfs_dirent *sd)
    struct rb_node **node = &sd->s_parent->s_dir.children.rb_node;
    struct rb_node *parent = NULL;

    - if (sysfs_type(sd) == SYSFS_DIR)
    - sd->s_parent->s_dir.subdirs++;
    -
    while (*node) {
    struct sysfs_dirent *pos;
    int result;
    @@ -126,9 +123,6 @@ static int sysfs_link_sibling(struct sysfs_dirent *sd)
    */
    static void sysfs_unlink_sibling(struct sysfs_dirent *sd)
    {
    - if (sysfs_type(sd) == SYSFS_DIR)
    - sd->s_parent->s_dir.subdirs--;
    -
    rb_erase(&sd->s_rb, &sd->s_parent->s_dir.children);
    }

    diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
    index c81b22f..c7be716 100644
    --- a/fs/sysfs/inode.c
    +++ b/fs/sysfs/inode.c
    @@ -216,9 +216,6 @@ static void sysfs_refresh_inode(struct sysfs_dirent *sd, struct inode *inode)
    iattrs->ia_secdata,
    iattrs->ia_secdata_len);
    }
    -
    - if (sysfs_type(sd) == SYSFS_DIR)
    - set_nlink(inode, sd->s_dir.subdirs + 2);
    }

    int sysfs_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
    diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
    index 3f23061..2adb052 100644
    --- a/fs/sysfs/sysfs.h
    +++ b/fs/sysfs/sysfs.h
    @@ -19,7 +19,6 @@ struct sysfs_open_dirent;
    struct sysfs_elem_dir {
    struct kobject *kobj;

    - unsigned long subdirs;
    /* children rbtree starts here and goes through sd->s_rb */
    struct rb_root children;
    };
    --
    1.7.2.5


    \
     
     \ /
      Last update: 2011-12-19 05:11    [W:0.025 / U:0.408 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site