Commit 18f4c644773bc8de1fd9c5182b30c231aafb94ef
1 parent
1d5ccd1c42
Exists in
master
and in
39 other branches
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
fs/jffs2/acl.c
... | ... | @@ -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) |
fs/jffs2/acl.h
... | ... | @@ -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) |
fs/jffs2/dir.c
fs/jffs2/file.c
fs/jffs2/symlink.c
fs/jfs/acl.c
... | ... | @@ -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) |
fs/jfs/file.c
fs/jfs/jfs_acl.h
fs/jfs/namei.c
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, |