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 = { |