diff options
Diffstat (limited to 'fs/jffs2/fs.c')
| -rw-r--r-- | fs/jffs2/fs.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c index ea1f37d4fc58..4607cdc4c46d 100644 --- a/fs/jffs2/fs.c +++ b/fs/jffs2/fs.c | |||
| @@ -185,7 +185,12 @@ static int jffs2_do_setattr (struct inode *inode, struct iattr *iattr) | |||
| 185 | 185 | ||
| 186 | int jffs2_setattr(struct dentry *dentry, struct iattr *iattr) | 186 | int jffs2_setattr(struct dentry *dentry, struct iattr *iattr) |
| 187 | { | 187 | { |
| 188 | return jffs2_do_setattr(dentry->d_inode, iattr); | 188 | int rc; |
| 189 | |||
| 190 | rc = jffs2_do_setattr(dentry->d_inode, iattr); | ||
| 191 | if (!rc && (iattr->ia_valid & ATTR_MODE)) | ||
| 192 | rc = jffs2_acl_chmod(dentry->d_inode); | ||
| 193 | return rc; | ||
| 189 | } | 194 | } |
| 190 | 195 | ||
| 191 | int jffs2_statfs(struct super_block *sb, struct kstatfs *buf) | 196 | int jffs2_statfs(struct super_block *sb, struct kstatfs *buf) |
| @@ -224,6 +229,7 @@ void jffs2_clear_inode (struct inode *inode) | |||
| 224 | 229 | ||
| 225 | D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode)); | 230 | D1(printk(KERN_DEBUG "jffs2_clear_inode(): ino #%lu mode %o\n", inode->i_ino, inode->i_mode)); |
| 226 | 231 | ||
| 232 | jffs2_xattr_delete_inode(c, f->inocache); | ||
| 227 | jffs2_do_clear_inode(c, f); | 233 | jffs2_do_clear_inode(c, f); |
| 228 | } | 234 | } |
| 229 | 235 | ||
| @@ -497,6 +503,8 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent) | |||
| 497 | } | 503 | } |
| 498 | memset(c->inocache_list, 0, INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *)); | 504 | memset(c->inocache_list, 0, INOCACHE_HASHSIZE * sizeof(struct jffs2_inode_cache *)); |
| 499 | 505 | ||
| 506 | jffs2_init_xattr_subsystem(c); | ||
| 507 | |||
| 500 | if ((ret = jffs2_do_mount_fs(c))) | 508 | if ((ret = jffs2_do_mount_fs(c))) |
| 501 | goto out_inohash; | 509 | goto out_inohash; |
| 502 | 510 | ||
| @@ -531,6 +539,7 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent) | |||
| 531 | else | 539 | else |
| 532 | kfree(c->blocks); | 540 | kfree(c->blocks); |
| 533 | out_inohash: | 541 | out_inohash: |
| 542 | jffs2_clear_xattr_subsystem(c); | ||
| 534 | kfree(c->inocache_list); | 543 | kfree(c->inocache_list); |
| 535 | out_wbuf: | 544 | out_wbuf: |
| 536 | jffs2_flash_cleanup(c); | 545 | jffs2_flash_cleanup(c); |
