aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/file.c
diff options
context:
space:
mode:
authorTiger Yang <tiger.yang@oracle.com>2006-11-26 20:59:21 -0500
committerMark Fasheh <mark.fasheh@oracle.com>2006-12-01 21:29:14 -0500
commitd38eb8db6aa359c060dfb72a29cf8d94a96657d8 (patch)
tree3d27b15ae8fc1718030147a2ed08812c902a7b2e /fs/ocfs2/file.c
parent58d206c2fa5cc0b35bf3ca48324d7633aa7d0412 (diff)
ocfs2: implement i_op->permission
Implement .permission() in ocfs2_file_iops, ocfs2_special_file_iops and ocfs2_dir_iops. This helps us avoid some multi-node races with mode change and vfs operations. Signed-off-by: Tiger Yang <tiger.yang@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/file.c')
-rw-r--r--fs/ocfs2/file.c24
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
948int 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);
965out:
966 mlog_exit(ret);
967 return ret;
968}
969
948static int ocfs2_write_remove_suid(struct inode *inode) 970static int ocfs2_write_remove_suid(struct inode *inode)
949{ 971{
950 int ret; 972 int ret;
@@ -1329,11 +1351,13 @@ bail:
1329struct inode_operations ocfs2_file_iops = { 1351struct 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
1334struct inode_operations ocfs2_special_file_iops = { 1357struct 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
1339const struct file_operations ocfs2_fops = { 1363const struct file_operations ocfs2_fops = {