diff options
Diffstat (limited to 'fs/jfs/file.c')
| -rw-r--r-- | fs/jfs/file.c | 31 | 
1 files changed, 29 insertions, 2 deletions
| diff --git a/fs/jfs/file.c b/fs/jfs/file.c index 2b70fa78e4a7..14ba982b3f24 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | */ | 18 | */ | 
| 19 | 19 | ||
| 20 | #include <linux/fs.h> | 20 | #include <linux/fs.h> | 
| 21 | #include <linux/quotaops.h> | ||
| 21 | #include "jfs_incore.h" | 22 | #include "jfs_incore.h" | 
| 22 | #include "jfs_inode.h" | 23 | #include "jfs_inode.h" | 
| 23 | #include "jfs_dmap.h" | 24 | #include "jfs_dmap.h" | 
| @@ -47,7 +48,7 @@ static int jfs_open(struct inode *inode, struct file *file) | |||
| 47 | { | 48 | { | 
| 48 | int rc; | 49 | int rc; | 
| 49 | 50 | ||
| 50 | if ((rc = generic_file_open(inode, file))) | 51 | if ((rc = dquot_file_open(inode, file))) | 
| 51 | return rc; | 52 | return rc; | 
| 52 | 53 | ||
| 53 | /* | 54 | /* | 
| @@ -88,14 +89,40 @@ static int jfs_release(struct inode *inode, struct file *file) | |||
| 88 | return 0; | 89 | return 0; | 
| 89 | } | 90 | } | 
| 90 | 91 | ||
| 92 | int jfs_setattr(struct dentry *dentry, struct iattr *iattr) | ||
| 93 | { | ||
| 94 | struct inode *inode = dentry->d_inode; | ||
| 95 | int rc; | ||
| 96 | |||
| 97 | rc = inode_change_ok(inode, iattr); | ||
| 98 | if (rc) | ||
| 99 | return rc; | ||
| 100 | |||
| 101 | if (iattr->ia_valid & ATTR_SIZE) | ||
| 102 | dquot_initialize(inode); | ||
| 103 | if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) || | ||
| 104 | (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { | ||
| 105 | rc = dquot_transfer(inode, iattr); | ||
| 106 | if (rc) | ||
| 107 | return rc; | ||
| 108 | } | ||
| 109 | |||
| 110 | rc = inode_setattr(inode, iattr); | ||
| 111 | |||
| 112 | if (!rc && (iattr->ia_valid & ATTR_MODE)) | ||
| 113 | rc = jfs_acl_chmod(inode); | ||
| 114 | |||
| 115 | return rc; | ||
| 116 | } | ||
| 117 | |||
| 91 | const struct inode_operations jfs_file_inode_operations = { | 118 | const struct inode_operations jfs_file_inode_operations = { | 
| 92 | .truncate = jfs_truncate, | 119 | .truncate = jfs_truncate, | 
| 93 | .setxattr = jfs_setxattr, | 120 | .setxattr = jfs_setxattr, | 
| 94 | .getxattr = jfs_getxattr, | 121 | .getxattr = jfs_getxattr, | 
| 95 | .listxattr = jfs_listxattr, | 122 | .listxattr = jfs_listxattr, | 
| 96 | .removexattr = jfs_removexattr, | 123 | .removexattr = jfs_removexattr, | 
| 97 | #ifdef CONFIG_JFS_POSIX_ACL | ||
| 98 | .setattr = jfs_setattr, | 124 | .setattr = jfs_setattr, | 
| 125 | #ifdef CONFIG_JFS_POSIX_ACL | ||
| 99 | .check_acl = jfs_check_acl, | 126 | .check_acl = jfs_check_acl, | 
| 100 | #endif | 127 | #endif | 
| 101 | }; | 128 | }; | 
