git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
NFS: Clean up weak cache consistency code
[safe/jmp/linux-2.6]
/
fs
/
sysfs
/
file.c
diff --git
a/fs/sysfs/file.c
b/fs/sysfs/file.c
index
335288b
..
4013d79
100644
(file)
--- a/
fs/sysfs/file.c
+++ b/
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 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);
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)) {
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);
}
up(&dir->d_inode->i_sem);