diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_iops.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_iops.c | 53 |
1 files changed, 13 insertions, 40 deletions
diff --git a/fs/xfs/linux-2.6/xfs_iops.c b/fs/xfs/linux-2.6/xfs_iops.c index 631d0137551e..84e391ab70b0 100644 --- a/fs/xfs/linux-2.6/xfs_iops.c +++ b/fs/xfs/linux-2.6/xfs_iops.c | |||
@@ -17,6 +17,7 @@ | |||
17 | */ | 17 | */ |
18 | #include "xfs.h" | 18 | #include "xfs.h" |
19 | #include "xfs_fs.h" | 19 | #include "xfs_fs.h" |
20 | #include "xfs_acl.h" | ||
20 | #include "xfs_bit.h" | 21 | #include "xfs_bit.h" |
21 | #include "xfs_log.h" | 22 | #include "xfs_log.h" |
22 | #include "xfs_inum.h" | 23 | #include "xfs_inum.h" |
@@ -51,6 +52,7 @@ | |||
51 | #include <linux/capability.h> | 52 | #include <linux/capability.h> |
52 | #include <linux/xattr.h> | 53 | #include <linux/xattr.h> |
53 | #include <linux/namei.h> | 54 | #include <linux/namei.h> |
55 | #include <linux/posix_acl.h> | ||
54 | #include <linux/security.h> | 56 | #include <linux/security.h> |
55 | #include <linux/falloc.h> | 57 | #include <linux/falloc.h> |
56 | #include <linux/fiemap.h> | 58 | #include <linux/fiemap.h> |
@@ -202,9 +204,8 @@ xfs_vn_mknod( | |||
202 | { | 204 | { |
203 | struct inode *inode; | 205 | struct inode *inode; |
204 | struct xfs_inode *ip = NULL; | 206 | struct xfs_inode *ip = NULL; |
205 | xfs_acl_t *default_acl = NULL; | 207 | struct posix_acl *default_acl = NULL; |
206 | struct xfs_name name; | 208 | struct xfs_name name; |
207 | int (*test_default_acl)(struct inode *) = _ACL_DEFAULT_EXISTS; | ||
208 | int error; | 209 | int error; |
209 | 210 | ||
210 | /* | 211 | /* |
@@ -219,18 +220,14 @@ xfs_vn_mknod( | |||
219 | rdev = 0; | 220 | rdev = 0; |
220 | } | 221 | } |
221 | 222 | ||
222 | if (test_default_acl && test_default_acl(dir)) { | 223 | if (IS_POSIXACL(dir)) { |
223 | if (!_ACL_ALLOC(default_acl)) { | 224 | default_acl = xfs_get_acl(dir, ACL_TYPE_DEFAULT); |
224 | return -ENOMEM; | 225 | if (IS_ERR(default_acl)) |
225 | } | 226 | return -PTR_ERR(default_acl); |
226 | if (!_ACL_GET_DEFAULT(dir, default_acl)) { | ||
227 | _ACL_FREE(default_acl); | ||
228 | default_acl = NULL; | ||
229 | } | ||
230 | } | ||
231 | 227 | ||
232 | if (IS_POSIXACL(dir) && !default_acl) | 228 | if (!default_acl) |
233 | mode &= ~current->fs->umask; | 229 | mode &= ~current->fs->umask; |
230 | } | ||
234 | 231 | ||
235 | xfs_dentry_to_name(&name, dentry); | 232 | xfs_dentry_to_name(&name, dentry); |
236 | error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); | 233 | error = xfs_create(XFS_I(dir), &name, mode, rdev, &ip, NULL); |
@@ -244,10 +241,10 @@ xfs_vn_mknod( | |||
244 | goto out_cleanup_inode; | 241 | goto out_cleanup_inode; |
245 | 242 | ||
246 | if (default_acl) { | 243 | if (default_acl) { |
247 | error = _ACL_INHERIT(inode, mode, default_acl); | 244 | error = -xfs_inherit_acl(inode, default_acl); |
248 | if (unlikely(error)) | 245 | if (unlikely(error)) |
249 | goto out_cleanup_inode; | 246 | goto out_cleanup_inode; |
250 | _ACL_FREE(default_acl); | 247 | posix_acl_release(default_acl); |
251 | } | 248 | } |
252 | 249 | ||
253 | 250 | ||
@@ -257,8 +254,7 @@ xfs_vn_mknod( | |||
257 | out_cleanup_inode: | 254 | out_cleanup_inode: |
258 | xfs_cleanup_inode(dir, inode, dentry); | 255 | xfs_cleanup_inode(dir, inode, dentry); |
259 | out_free_acl: | 256 | out_free_acl: |
260 | if (default_acl) | 257 | posix_acl_release(default_acl); |
261 | _ACL_FREE(default_acl); | ||
262 | return -error; | 258 | return -error; |
263 | } | 259 | } |
264 | 260 | ||
@@ -488,26 +484,6 @@ xfs_vn_put_link( | |||
488 | kfree(s); | 484 | kfree(s); |
489 | } | 485 | } |
490 | 486 | ||
491 | #ifdef CONFIG_XFS_POSIX_ACL | ||
492 | STATIC int | ||
493 | xfs_check_acl( | ||
494 | struct inode *inode, | ||
495 | int mask) | ||
496 | { | ||
497 | struct xfs_inode *ip = XFS_I(inode); | ||
498 | int error; | ||
499 | |||
500 | xfs_itrace_entry(ip); | ||
501 | |||
502 | if (XFS_IFORK_Q(ip)) { | ||
503 | error = xfs_acl_iaccess(ip, mask, NULL); | ||
504 | if (error != -1) | ||
505 | return -error; | ||
506 | } | ||
507 | |||
508 | return -EAGAIN; | ||
509 | } | ||
510 | |||
511 | STATIC int | 487 | STATIC int |
512 | xfs_vn_permission( | 488 | xfs_vn_permission( |
513 | struct inode *inode, | 489 | struct inode *inode, |
@@ -515,9 +491,6 @@ xfs_vn_permission( | |||
515 | { | 491 | { |
516 | return generic_permission(inode, mask, xfs_check_acl); | 492 | return generic_permission(inode, mask, xfs_check_acl); |
517 | } | 493 | } |
518 | #else | ||
519 | #define xfs_vn_permission NULL | ||
520 | #endif | ||
521 | 494 | ||
522 | STATIC int | 495 | STATIC int |
523 | xfs_vn_getattr( | 496 | xfs_vn_getattr( |