Messages in this thread Patch in this message | | | From | "Eric W. Biederman" <> | Subject | [PATCH 11/20] sysfs: Update s_iattr on link and unlink. | Date | Wed, 20 May 2009 17:28:05 -0700 |
| |
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.
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 8dd2abf..94b926f 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.1.2.350.g88cc
| |