diff options
Diffstat (limited to 'fs/ocfs2/file.c')
| -rw-r--r-- | fs/ocfs2/file.c | 24 | 
1 files changed, 24 insertions, 0 deletions
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index b64ef7c6e2d2..8786b3c490aa 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c  | |||
| @@ -945,6 +945,28 @@ bail: | |||
| 945 | return err; | 945 | return err; | 
| 946 | } | 946 | } | 
| 947 | 947 | ||
| 948 | int ocfs2_permission(struct inode *inode, int mask, struct nameidata *nd) | ||
| 949 | { | ||
| 950 | int ret; | ||
| 951 | |||
| 952 | mlog_entry_void(); | ||
| 953 | |||
| 954 | ret = ocfs2_meta_lock(inode, NULL, 0); | ||
| 955 | if (ret) { | ||
| 956 | mlog_errno(ret); | ||
| 957 | goto out; | ||
| 958 | } | ||
| 959 | |||
| 960 | ret = generic_permission(inode, mask, NULL); | ||
| 961 | if (ret) | ||
| 962 | mlog_errno(ret); | ||
| 963 | |||
| 964 | ocfs2_meta_unlock(inode, 0); | ||
| 965 | out: | ||
| 966 | mlog_exit(ret); | ||
| 967 | return ret; | ||
| 968 | } | ||
| 969 | |||
| 948 | static int ocfs2_write_remove_suid(struct inode *inode) | 970 | static int ocfs2_write_remove_suid(struct inode *inode) | 
| 949 | { | 971 | { | 
| 950 | int ret; | 972 | int ret; | 
| @@ -1329,11 +1351,13 @@ bail: | |||
| 1329 | struct inode_operations ocfs2_file_iops = { | 1351 | struct inode_operations ocfs2_file_iops = { | 
| 1330 | .setattr = ocfs2_setattr, | 1352 | .setattr = ocfs2_setattr, | 
| 1331 | .getattr = ocfs2_getattr, | 1353 | .getattr = ocfs2_getattr, | 
| 1354 | .permission = ocfs2_permission, | ||
| 1332 | }; | 1355 | }; | 
| 1333 | 1356 | ||
| 1334 | struct inode_operations ocfs2_special_file_iops = { | 1357 | struct inode_operations ocfs2_special_file_iops = { | 
| 1335 | .setattr = ocfs2_setattr, | 1358 | .setattr = ocfs2_setattr, | 
| 1336 | .getattr = ocfs2_getattr, | 1359 | .getattr = ocfs2_getattr, | 
| 1360 | .permission = ocfs2_permission, | ||
| 1337 | }; | 1361 | }; | 
| 1338 | 1362 | ||
| 1339 | const struct file_operations ocfs2_fops = { | 1363 | const struct file_operations ocfs2_fops = { | 
