Commit 18f4c644773bc8de1fd9c5182b30c231aafb94ef

Authored by Linus Torvalds
1 parent 1d5ccd1c42

jffs2/jfs/xfs: switch over to 'check_acl' rather than 'permission()'

This avoids an indirect call in the VFS for each path component lookup.

Well, at least as long as you own the directory in question, and the ACL
check is unnecessary.

Reviewed-by: James Morris <jmorris@namei.org>
Acked-by: Serge Hallyn <serue@us.ibm.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 10 changed files with 14 additions and 32 deletions Side-by-side Diff

... ... @@ -258,7 +258,7 @@
258 258 return rc;
259 259 }
260 260  
261   -static int jffs2_check_acl(struct inode *inode, int mask)
  261 +int jffs2_check_acl(struct inode *inode, int mask)
262 262 {
263 263 struct posix_acl *acl;
264 264 int rc;
... ... @@ -272,11 +272,6 @@
272 272 return rc;
273 273 }
274 274 return -EAGAIN;
275   -}
276   -
277   -int jffs2_permission(struct inode *inode, int mask)
278   -{
279   - return generic_permission(inode, mask, jffs2_check_acl);
280 275 }
281 276  
282 277 int jffs2_init_acl_pre(struct inode *dir_i, struct inode *inode, int *i_mode)
... ... @@ -26,7 +26,7 @@
26 26  
27 27 #ifdef CONFIG_JFFS2_FS_POSIX_ACL
28 28  
29   -extern int jffs2_permission(struct inode *, int);
  29 +extern int jffs2_check_acl(struct inode *, int);
30 30 extern int jffs2_acl_chmod(struct inode *);
31 31 extern int jffs2_init_acl_pre(struct inode *, struct inode *, int *);
32 32 extern int jffs2_init_acl_post(struct inode *);
... ... @@ -36,7 +36,7 @@
36 36  
37 37 #else
38 38  
39   -#define jffs2_permission (NULL)
  39 +#define jffs2_check_acl (NULL)
40 40 #define jffs2_acl_chmod(inode) (0)
41 41 #define jffs2_init_acl_pre(dir_i,inode,mode) (0)
42 42 #define jffs2_init_acl_post(inode) (0)
... ... @@ -55,7 +55,7 @@
55 55 .rmdir = jffs2_rmdir,
56 56 .mknod = jffs2_mknod,
57 57 .rename = jffs2_rename,
58   - .permission = jffs2_permission,
  58 + .check_acl = jffs2_check_acl,
59 59 .setattr = jffs2_setattr,
60 60 .setxattr = jffs2_setxattr,
61 61 .getxattr = jffs2_getxattr,
... ... @@ -56,7 +56,7 @@
56 56  
57 57 const struct inode_operations jffs2_file_inode_operations =
58 58 {
59   - .permission = jffs2_permission,
  59 + .check_acl = jffs2_check_acl,
60 60 .setattr = jffs2_setattr,
61 61 .setxattr = jffs2_setxattr,
62 62 .getxattr = jffs2_getxattr,
... ... @@ -21,7 +21,7 @@
21 21 {
22 22 .readlink = generic_readlink,
23 23 .follow_link = jffs2_follow_link,
24   - .permission = jffs2_permission,
  24 + .check_acl = jffs2_check_acl,
25 25 .setattr = jffs2_setattr,
26 26 .setxattr = jffs2_setxattr,
27 27 .getxattr = jffs2_getxattr,
... ... @@ -114,7 +114,7 @@
114 114 return rc;
115 115 }
116 116  
117   -static int jfs_check_acl(struct inode *inode, int mask)
  117 +int jfs_check_acl(struct inode *inode, int mask)
118 118 {
119 119 struct posix_acl *acl = jfs_get_acl(inode, ACL_TYPE_ACCESS);
120 120  
... ... @@ -127,11 +127,6 @@
127 127 }
128 128  
129 129 return -EAGAIN;
130   -}
131   -
132   -int jfs_permission(struct inode *inode, int mask)
133   -{
134   - return generic_permission(inode, mask, jfs_check_acl);
135 130 }
136 131  
137 132 int jfs_init_acl(tid_t tid, struct inode *inode, struct inode *dir)
... ... @@ -96,7 +96,7 @@
96 96 .removexattr = jfs_removexattr,
97 97 #ifdef CONFIG_JFS_POSIX_ACL
98 98 .setattr = jfs_setattr,
99   - .permission = jfs_permission,
  99 + .check_acl = jfs_check_acl,
100 100 #endif
101 101 };
102 102  
... ... @@ -20,7 +20,7 @@
20 20  
21 21 #ifdef CONFIG_JFS_POSIX_ACL
22 22  
23   -int jfs_permission(struct inode *, int);
  23 +int jfs_check_acl(struct inode *, int);
24 24 int jfs_init_acl(tid_t, struct inode *, struct inode *);
25 25 int jfs_setattr(struct dentry *, struct iattr *);
26 26  
... ... @@ -1543,7 +1543,7 @@
1543 1543 .removexattr = jfs_removexattr,
1544 1544 #ifdef CONFIG_JFS_POSIX_ACL
1545 1545 .setattr = jfs_setattr,
1546   - .permission = jfs_permission,
  1546 + .check_acl = jfs_check_acl,
1547 1547 #endif
1548 1548 };
1549 1549  
fs/xfs/linux-2.6/xfs_iops.c
... ... @@ -485,14 +485,6 @@
485 485 }
486 486  
487 487 STATIC int
488   -xfs_vn_permission(
489   - struct inode *inode,
490   - int mask)
491   -{
492   - return generic_permission(inode, mask, xfs_check_acl);
493   -}
494   -
495   -STATIC int
496 488 xfs_vn_getattr(
497 489 struct vfsmount *mnt,
498 490 struct dentry *dentry,
... ... @@ -696,7 +688,7 @@
696 688 }
697 689  
698 690 static const struct inode_operations xfs_inode_operations = {
699   - .permission = xfs_vn_permission,
  691 + .check_acl = xfs_check_acl,
700 692 .truncate = xfs_vn_truncate,
701 693 .getattr = xfs_vn_getattr,
702 694 .setattr = xfs_vn_setattr,
... ... @@ -724,7 +716,7 @@
724 716 .rmdir = xfs_vn_unlink,
725 717 .mknod = xfs_vn_mknod,
726 718 .rename = xfs_vn_rename,
727   - .permission = xfs_vn_permission,
  719 + .check_acl = xfs_check_acl,
728 720 .getattr = xfs_vn_getattr,
729 721 .setattr = xfs_vn_setattr,
730 722 .setxattr = generic_setxattr,
... ... @@ -749,7 +741,7 @@
749 741 .rmdir = xfs_vn_unlink,
750 742 .mknod = xfs_vn_mknod,
751 743 .rename = xfs_vn_rename,
752   - .permission = xfs_vn_permission,
  744 + .check_acl = xfs_check_acl,
753 745 .getattr = xfs_vn_getattr,
754 746 .setattr = xfs_vn_setattr,
755 747 .setxattr = generic_setxattr,
... ... @@ -762,7 +754,7 @@
762 754 .readlink = generic_readlink,
763 755 .follow_link = xfs_vn_follow_link,
764 756 .put_link = xfs_vn_put_link,
765   - .permission = xfs_vn_permission,
  757 + .check_acl = xfs_check_acl,
766 758 .getattr = xfs_vn_getattr,
767 759 .setattr = xfs_vn_setattr,
768 760 .setxattr = generic_setxattr,