diff options
Diffstat (limited to 'fs/sysfs/inode.c')
| -rw-r--r-- | fs/sysfs/inode.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c index 8de13bafaa76..970a33f03299 100644 --- a/fs/sysfs/inode.c +++ b/fs/sysfs/inode.c | |||
| @@ -85,7 +85,7 @@ int sysfs_setattr(struct dentry * dentry, struct iattr * iattr) | |||
| 85 | 85 | ||
| 86 | if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) | 86 | if (!in_group_p(inode->i_gid) && !capable(CAP_FSETID)) |
| 87 | mode &= ~S_ISGID; | 87 | mode &= ~S_ISGID; |
| 88 | sd_iattr->ia_mode = mode; | 88 | sd_iattr->ia_mode = sd->s_mode = mode; |
| 89 | } | 89 | } |
| 90 | 90 | ||
| 91 | return error; | 91 | return error; |
| @@ -228,6 +228,10 @@ void sysfs_hash_and_remove(struct dentry * dir, const char * name) | |||
| 228 | struct sysfs_dirent * sd; | 228 | struct sysfs_dirent * sd; |
| 229 | struct sysfs_dirent * parent_sd = dir->d_fsdata; | 229 | struct sysfs_dirent * parent_sd = dir->d_fsdata; |
| 230 | 230 | ||
| 231 | if (dir->d_inode == NULL) | ||
| 232 | /* no inode means this hasn't been made visible yet */ | ||
| 233 | return; | ||
| 234 | |||
| 231 | down(&dir->d_inode->i_sem); | 235 | down(&dir->d_inode->i_sem); |
| 232 | list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { | 236 | list_for_each_entry(sd, &parent_sd->s_children, s_sibling) { |
| 233 | if (!sd->s_element) | 237 | if (!sd->s_element) |
