lkml.org 
[lkml]   [2009]   [May]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 11/24] sysfs: Update s_iattr on link and unlink.
    From: Eric W. Biederman <ebiederm@xmission.com>

    Currently sysfs updates the timestamps on the vfs directory
    inode when we create or remove a directory entry but doesn't
    update the cached copy on the sysfs_dirent, fix that oversight.

    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Eric W. Biederman <ebiederm@aristanetworks.com>
    ---
    fs/sysfs/dir.c | 14 ++++++++++++++
    1 files changed, 14 insertions(+), 0 deletions(-)

    diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
    index e0bf3a5..c6472d8 100644
    --- a/fs/sysfs/dir.c
    +++ b/fs/sysfs/dir.c
    @@ -480,6 +480,8 @@ static char *sysfs_pathname(struct sysfs_dirent *sd, char *path)
    */
    int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
    {
    + struct iattr *ps_iattr;
    +
    if (sysfs_find_dirent(acxt->parent_sd, sd->s_name)) {
    char *path = kzalloc(PATH_MAX, GFP_KERNEL);
    WARN(1, KERN_WARNING
    @@ -500,6 +502,11 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)

    sysfs_link_sibling(sd);

    + /* Update timestamps on the parent */
    + ps_iattr = acxt->parent_sd->s_iattr;
    + if (ps_iattr)
    + ps_iattr->ia_ctime = ps_iattr->ia_mtime = CURRENT_TIME;
    +
    return 0;
    }

    @@ -520,10 +527,17 @@ int sysfs_add_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
    */
    void sysfs_remove_one(struct sysfs_addrm_cxt *acxt, struct sysfs_dirent *sd)
    {
    + struct iattr *ps_iattr;
    +
    BUG_ON(sd->s_flags & SYSFS_FLAG_REMOVED);

    sysfs_unlink_sibling(sd);

    + /* Update timestamps on the parent */
    + ps_iattr = acxt->parent_sd->s_iattr;
    + if (ps_iattr)
    + ps_iattr->ia_ctime = ps_iattr->ia_mtime = CURRENT_TIME;
    +
    sd->s_flags |= SYSFS_FLAG_REMOVED;
    sd->s_sibling = acxt->removed;
    acxt->removed = sd;
    --
    1.6.3.1.54.g99dd.dirty


    \
     
     \ /
      Last update: 2009-05-29 01:25    [W:0.032 / U:31.160 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site