diff options
author | Christoph Hellwig <hch@lst.de> | 2011-07-23 11:37:31 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2011-07-25 14:30:23 -0400 |
commit | 4e34e719e457f2e031297175410fc0bd4016a085 (patch) | |
tree | ab969a371e0d2efc6bfbf503ca6cdfce3af3bf6c /fs/xfs | |
parent | edde854e8bb34a7f32fa993d721f1da0faf64165 (diff) |
fs: take the ACL checks to common code
Replace the ->check_acl method with a ->get_acl method that simply reads an
ACL from disk after having a cache miss. This means we can replace the ACL
checking boilerplate code with a single implementation in namei.c.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_acl.c | 21 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 8 | ||||
-rw-r--r-- | fs/xfs/linux-2.6/xfs_trace.h | 2 | ||||
-rw-r--r-- | fs/xfs/xfs_acl.h | 2 |
4 files changed, 7 insertions, 26 deletions
diff --git a/fs/xfs/linux-2.6/xfs_acl.c b/fs/xfs/linux-2.6/xfs_acl.c index 2827bbd8366e..44ce51656804 100644 --- a/fs/xfs/linux-2.6/xfs_acl.c +++ b/fs/xfs/linux-2.6/xfs_acl.c | |||
@@ -114,6 +114,8 @@ xfs_get_acl(struct inode *inode, int type) | |||
114 | if (acl != ACL_NOT_CACHED) | 114 | if (acl != ACL_NOT_CACHED) |
115 | return acl; | 115 | return acl; |
116 | 116 | ||
117 | trace_xfs_get_acl(ip); | ||
118 | |||
117 | switch (type) { | 119 | switch (type) { |
118 | case ACL_TYPE_ACCESS: | 120 | case ACL_TYPE_ACCESS: |
119 | ea_name = SGI_ACL_FILE; | 121 | ea_name = SGI_ACL_FILE; |
@@ -218,25 +220,6 @@ xfs_set_acl(struct inode *inode, int type, struct posix_acl *acl) | |||
218 | return error; | 220 | return error; |
219 | } | 221 | } |
220 | 222 | ||
221 | int | ||
222 | xfs_check_acl(struct inode *inode, int mask) | ||
223 | { | ||
224 | struct posix_acl *acl; | ||
225 | int error = -EAGAIN; | ||
226 | |||
227 | trace_xfs_check_acl(XFS_I(inode)); | ||
228 | |||
229 | acl = xfs_get_acl(inode, ACL_TYPE_ACCESS); | ||
230 | if (IS_ERR(acl)) | ||
231 | return PTR_ERR(acl); | ||
232 | if (acl) { | ||
233 | error = posix_acl_permission(inode, acl, mask); | ||
234 | posix_acl_release(acl); | ||
235 | } | ||
236 | |||
237 | return error; | ||
238 | } | ||
239 | |||
240 | static int | 223 | static int |
241 | xfs_set_mode(struct inode *inode, mode_t mode) | 224 | xfs_set_mode(struct inode *inode, mode_t mode) |
242 | { | 225 | { |
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 77463dd55198..6544c3236bc8 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -1022,7 +1022,7 @@ xfs_vn_fiemap( | |||
1022 | } | 1022 | } |
1023 | 1023 | ||
1024 | static const struct inode_operations xfs_inode_operations = { | 1024 | static const struct inode_operations xfs_inode_operations = { |
1025 | .check_acl = xfs_check_acl, | 1025 | .get_acl = xfs_get_acl, |
1026 | .getattr = xfs_vn_getattr, | 1026 | .getattr = xfs_vn_getattr, |
1027 | .setattr = xfs_vn_setattr, | 1027 | .setattr = xfs_vn_setattr, |
1028 | .setxattr = generic_setxattr, | 1028 | .setxattr = generic_setxattr, |
@@ -1048,7 +1048,7 @@ static const struct inode_operations xfs_dir_inode_operations = { | |||
1048 | .rmdir = xfs_vn_unlink, | 1048 | .rmdir = xfs_vn_unlink, |
1049 | .mknod = xfs_vn_mknod, | 1049 | .mknod = xfs_vn_mknod, |
1050 | .rename = xfs_vn_rename, | 1050 | .rename = xfs_vn_rename, |
1051 | .check_acl = xfs_check_acl, | 1051 | .get_acl = xfs_get_acl, |
1052 | .getattr = xfs_vn_getattr, | 1052 | .getattr = xfs_vn_getattr, |
1053 | .setattr = xfs_vn_setattr, | 1053 | .setattr = xfs_vn_setattr, |
1054 | .setxattr = generic_setxattr, | 1054 | .setxattr = generic_setxattr, |
@@ -1073,7 +1073,7 @@ static const struct inode_operations xfs_dir_ci_inode_operations = { | |||
1073 | .rmdir = xfs_vn_unlink, | 1073 | .rmdir = xfs_vn_unlink, |
1074 | .mknod = xfs_vn_mknod, | 1074 | .mknod = xfs_vn_mknod, |
1075 | .rename = xfs_vn_rename, | 1075 | .rename = xfs_vn_rename, |
1076 | .check_acl = xfs_check_acl, | 1076 | .get_acl = xfs_get_acl, |
1077 | .getattr = xfs_vn_getattr, | 1077 | .getattr = xfs_vn_getattr, |
1078 | .setattr = xfs_vn_setattr, | 1078 | .setattr = xfs_vn_setattr, |
1079 | .setxattr = generic_setxattr, | 1079 | .setxattr = generic_setxattr, |
@@ -1086,7 +1086,7 @@ static const struct inode_operations xfs_symlink_inode_operations = { | |||
1086 | .readlink = generic_readlink, | 1086 | .readlink = generic_readlink, |
1087 | .follow_link = xfs_vn_follow_link, | 1087 | .follow_link = xfs_vn_follow_link, |
1088 | .put_link = xfs_vn_put_link, | 1088 | .put_link = xfs_vn_put_link, |
1089 | .check_acl = xfs_check_acl, | 1089 | .get_acl = xfs_get_acl, |
1090 | .getattr = xfs_vn_getattr, | 1090 | .getattr = xfs_vn_getattr, |
1091 | .setattr = xfs_vn_setattr, | 1091 | .setattr = xfs_vn_setattr, |
1092 | .setxattr = generic_setxattr, | 1092 | .setxattr = generic_setxattr, |
diff --git a/fs/xfs/linux-2.6/xfs_trace.h b/fs/xfs/linux-2.6/xfs_trace.h index fda0708ef2ea..690fc7a7bd72 100644 --- a/fs/xfs/linux-2.6/xfs_trace.h +++ b/fs/xfs/linux-2.6/xfs_trace.h | |||
@@ -571,7 +571,7 @@ DEFINE_INODE_EVENT(xfs_alloc_file_space); | |||
571 | DEFINE_INODE_EVENT(xfs_free_file_space); | 571 | DEFINE_INODE_EVENT(xfs_free_file_space); |
572 | DEFINE_INODE_EVENT(xfs_readdir); | 572 | DEFINE_INODE_EVENT(xfs_readdir); |
573 | #ifdef CONFIG_XFS_POSIX_ACL | 573 | #ifdef CONFIG_XFS_POSIX_ACL |
574 | DEFINE_INODE_EVENT(xfs_check_acl); | 574 | DEFINE_INODE_EVENT(xfs_get_acl); |
575 | #endif | 575 | #endif |
576 | DEFINE_INODE_EVENT(xfs_vm_bmap); | 576 | DEFINE_INODE_EVENT(xfs_vm_bmap); |
577 | DEFINE_INODE_EVENT(xfs_file_ioctl); | 577 | DEFINE_INODE_EVENT(xfs_file_ioctl); |
diff --git a/fs/xfs/xfs_acl.h b/fs/xfs/xfs_acl.h index 0135e2a669d7..2c656ef49473 100644 --- a/fs/xfs/xfs_acl.h +++ b/fs/xfs/xfs_acl.h | |||
@@ -42,7 +42,6 @@ struct xfs_acl { | |||
42 | #define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1) | 42 | #define SGI_ACL_DEFAULT_SIZE (sizeof(SGI_ACL_DEFAULT)-1) |
43 | 43 | ||
44 | #ifdef CONFIG_XFS_POSIX_ACL | 44 | #ifdef CONFIG_XFS_POSIX_ACL |
45 | extern int xfs_check_acl(struct inode *inode, int mask); | ||
46 | extern struct posix_acl *xfs_get_acl(struct inode *inode, int type); | 45 | extern struct posix_acl *xfs_get_acl(struct inode *inode, int type); |
47 | extern int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl); | 46 | extern int xfs_inherit_acl(struct inode *inode, struct posix_acl *default_acl); |
48 | extern int xfs_acl_chmod(struct inode *inode); | 47 | extern int xfs_acl_chmod(struct inode *inode); |
@@ -52,7 +51,6 @@ extern int posix_acl_default_exists(struct inode *inode); | |||
52 | extern const struct xattr_handler xfs_xattr_acl_access_handler; | 51 | extern const struct xattr_handler xfs_xattr_acl_access_handler; |
53 | extern const struct xattr_handler xfs_xattr_acl_default_handler; | 52 | extern const struct xattr_handler xfs_xattr_acl_default_handler; |
54 | #else | 53 | #else |
55 | # define xfs_check_acl NULL | ||
56 | # define xfs_get_acl(inode, type) NULL | 54 | # define xfs_get_acl(inode, type) NULL |
57 | # define xfs_inherit_acl(inode, default_acl) 0 | 55 | # define xfs_inherit_acl(inode, default_acl) 0 |
58 | # define xfs_acl_chmod(inode) 0 | 56 | # define xfs_acl_chmod(inode) 0 |