From 282a3e94767e9d6355234aa7d733e072db8f6dfd Mon Sep 17 00:00:00 2001 From: Maneesh Soni Date: Fri, 29 Jul 2005 12:13:35 -0700 Subject: [PATCH] --- yaml --- r: 5463 b: refs/heads/master c: bc062b1b5c6bef4e3a29c7fda57967251d12beb0 h: refs/heads/master i: 5461: 304bd745388b296724e660ddf579fab5b1d29c0e 5459: 3f72131ea9e639db9a4358900d86cd60b16b2c13 5455: ce2e2a60f434bcaac113c29ffaada1163ac0c6fc v: v3 --- [refs] | 2 +- trunk/fs/sysfs/file.c | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index def5cec7adb8..a0e6a7a663c7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 30d07a22a19329c89628a2057b0120245c482c9e +refs/heads/master: bc062b1b5c6bef4e3a29c7fda57967251d12beb0 diff --git a/trunk/fs/sysfs/file.c b/trunk/fs/sysfs/file.c index 335288b9be0f..4013d7905e84 100644 --- a/trunk/fs/sysfs/file.c +++ b/trunk/fs/sysfs/file.c @@ -437,8 +437,8 @@ int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode) { struct dentry *dir = kobj->dentry; struct dentry *victim; - struct sysfs_dirent *sd; - umode_t umode = (mode & S_IALLUGO) | S_IFREG; + struct inode * inode; + struct iattr newattrs; int res = -ENOENT; down(&dir->d_inode->i_sem); @@ -446,13 +446,15 @@ int sysfs_chmod_file(struct kobject *kobj, struct attribute *attr, mode_t mode) if (!IS_ERR(victim)) { if (victim->d_inode && (victim->d_parent->d_inode == dir->d_inode)) { - sd = victim->d_fsdata; - attr->mode = mode; - sd->s_mode = umode; - victim->d_inode->i_mode = umode; - dput(victim); - res = 0; + inode = victim->d_inode; + down(&inode->i_sem); + newattrs.ia_mode = (mode & S_IALLUGO) | + (inode->i_mode & ~S_IALLUGO); + newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; + res = notify_change(victim, &newattrs); + up(&inode->i_sem); } + dput(victim); } up(&dir->d_inode->i_sem);