diff options
Diffstat (limited to 'fs/xfs/xfs_acl.c')
| -rw-r--r-- | fs/xfs/xfs_acl.c | 71 |
1 files changed, 34 insertions, 37 deletions
diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c index 2539af34eb63..4b0cb474be4c 100644 --- a/fs/xfs/xfs_acl.c +++ b/fs/xfs/xfs_acl.c | |||
| @@ -21,12 +21,10 @@ | |||
| 21 | #include "xfs_bit.h" | 21 | #include "xfs_bit.h" |
| 22 | #include "xfs_inum.h" | 22 | #include "xfs_inum.h" |
| 23 | #include "xfs_ag.h" | 23 | #include "xfs_ag.h" |
| 24 | #include "xfs_dir.h" | ||
| 25 | #include "xfs_dir2.h" | 24 | #include "xfs_dir2.h" |
| 26 | #include "xfs_bmap_btree.h" | 25 | #include "xfs_bmap_btree.h" |
| 27 | #include "xfs_alloc_btree.h" | 26 | #include "xfs_alloc_btree.h" |
| 28 | #include "xfs_ialloc_btree.h" | 27 | #include "xfs_ialloc_btree.h" |
| 29 | #include "xfs_dir_sf.h" | ||
| 30 | #include "xfs_dir2_sf.h" | 28 | #include "xfs_dir2_sf.h" |
| 31 | #include "xfs_attr_sf.h" | 29 | #include "xfs_attr_sf.h" |
| 32 | #include "xfs_dinode.h" | 30 | #include "xfs_dinode.h" |
| @@ -39,15 +37,15 @@ | |||
| 39 | #include <linux/capability.h> | 37 | #include <linux/capability.h> |
| 40 | #include <linux/posix_acl_xattr.h> | 38 | #include <linux/posix_acl_xattr.h> |
| 41 | 39 | ||
| 42 | STATIC int xfs_acl_setmode(vnode_t *, xfs_acl_t *, int *); | 40 | STATIC int xfs_acl_setmode(bhv_vnode_t *, xfs_acl_t *, int *); |
| 43 | STATIC void xfs_acl_filter_mode(mode_t, xfs_acl_t *); | 41 | STATIC void xfs_acl_filter_mode(mode_t, xfs_acl_t *); |
| 44 | STATIC void xfs_acl_get_endian(xfs_acl_t *); | 42 | STATIC void xfs_acl_get_endian(xfs_acl_t *); |
| 45 | STATIC int xfs_acl_access(uid_t, gid_t, xfs_acl_t *, mode_t, cred_t *); | 43 | STATIC int xfs_acl_access(uid_t, gid_t, xfs_acl_t *, mode_t, cred_t *); |
| 46 | STATIC int xfs_acl_invalid(xfs_acl_t *); | 44 | STATIC int xfs_acl_invalid(xfs_acl_t *); |
| 47 | STATIC void xfs_acl_sync_mode(mode_t, xfs_acl_t *); | 45 | STATIC void xfs_acl_sync_mode(mode_t, xfs_acl_t *); |
| 48 | STATIC void xfs_acl_get_attr(vnode_t *, xfs_acl_t *, int, int, int *); | 46 | STATIC void xfs_acl_get_attr(bhv_vnode_t *, xfs_acl_t *, int, int, int *); |
| 49 | STATIC void xfs_acl_set_attr(vnode_t *, xfs_acl_t *, int, int *); | 47 | STATIC void xfs_acl_set_attr(bhv_vnode_t *, xfs_acl_t *, int, int *); |
| 50 | STATIC int xfs_acl_allow_set(vnode_t *, int); | 48 | STATIC int xfs_acl_allow_set(bhv_vnode_t *, int); |
| 51 | 49 | ||
| 52 | kmem_zone_t *xfs_acl_zone; | 50 | kmem_zone_t *xfs_acl_zone; |
| 53 | 51 | ||
| @@ -57,7 +55,7 @@ kmem_zone_t *xfs_acl_zone; | |||
| 57 | */ | 55 | */ |
| 58 | int | 56 | int |
| 59 | xfs_acl_vhasacl_access( | 57 | xfs_acl_vhasacl_access( |
| 60 | vnode_t *vp) | 58 | bhv_vnode_t *vp) |
| 61 | { | 59 | { |
| 62 | int error; | 60 | int error; |
| 63 | 61 | ||
| @@ -70,7 +68,7 @@ xfs_acl_vhasacl_access( | |||
| 70 | */ | 68 | */ |
| 71 | int | 69 | int |
| 72 | xfs_acl_vhasacl_default( | 70 | xfs_acl_vhasacl_default( |
| 73 | vnode_t *vp) | 71 | bhv_vnode_t *vp) |
| 74 | { | 72 | { |
| 75 | int error; | 73 | int error; |
| 76 | 74 | ||
| @@ -209,7 +207,7 @@ posix_acl_xfs_to_xattr( | |||
| 209 | 207 | ||
| 210 | int | 208 | int |
| 211 | xfs_acl_vget( | 209 | xfs_acl_vget( |
| 212 | vnode_t *vp, | 210 | bhv_vnode_t *vp, |
| 213 | void *acl, | 211 | void *acl, |
| 214 | size_t size, | 212 | size_t size, |
| 215 | int kind) | 213 | int kind) |
| @@ -241,10 +239,10 @@ xfs_acl_vget( | |||
| 241 | goto out; | 239 | goto out; |
| 242 | } | 240 | } |
| 243 | if (kind == _ACL_TYPE_ACCESS) { | 241 | if (kind == _ACL_TYPE_ACCESS) { |
| 244 | vattr_t va; | 242 | bhv_vattr_t va; |
| 245 | 243 | ||
| 246 | va.va_mask = XFS_AT_MODE; | 244 | va.va_mask = XFS_AT_MODE; |
| 247 | VOP_GETATTR(vp, &va, 0, sys_cred, error); | 245 | error = bhv_vop_getattr(vp, &va, 0, sys_cred); |
| 248 | if (error) | 246 | if (error) |
| 249 | goto out; | 247 | goto out; |
| 250 | xfs_acl_sync_mode(va.va_mode, xfs_acl); | 248 | xfs_acl_sync_mode(va.va_mode, xfs_acl); |
| @@ -260,7 +258,7 @@ out: | |||
| 260 | 258 | ||
| 261 | int | 259 | int |
| 262 | xfs_acl_vremove( | 260 | xfs_acl_vremove( |
| 263 | vnode_t *vp, | 261 | bhv_vnode_t *vp, |
| 264 | int kind) | 262 | int kind) |
| 265 | { | 263 | { |
| 266 | int error; | 264 | int error; |
| @@ -268,9 +266,9 @@ xfs_acl_vremove( | |||
| 268 | VN_HOLD(vp); | 266 | VN_HOLD(vp); |
| 269 | error = xfs_acl_allow_set(vp, kind); | 267 | error = xfs_acl_allow_set(vp, kind); |
| 270 | if (!error) { | 268 | if (!error) { |
| 271 | VOP_ATTR_REMOVE(vp, kind == _ACL_TYPE_DEFAULT? | 269 | error = bhv_vop_attr_remove(vp, kind == _ACL_TYPE_DEFAULT? |
| 272 | SGI_ACL_DEFAULT: SGI_ACL_FILE, | 270 | SGI_ACL_DEFAULT: SGI_ACL_FILE, |
| 273 | ATTR_ROOT, sys_cred, error); | 271 | ATTR_ROOT, sys_cred); |
| 274 | if (error == ENOATTR) | 272 | if (error == ENOATTR) |
| 275 | error = 0; /* 'scool */ | 273 | error = 0; /* 'scool */ |
| 276 | } | 274 | } |
| @@ -280,7 +278,7 @@ xfs_acl_vremove( | |||
| 280 | 278 | ||
| 281 | int | 279 | int |
| 282 | xfs_acl_vset( | 280 | xfs_acl_vset( |
| 283 | vnode_t *vp, | 281 | bhv_vnode_t *vp, |
| 284 | void *acl, | 282 | void *acl, |
| 285 | size_t size, | 283 | size_t size, |
| 286 | int kind) | 284 | int kind) |
| @@ -370,10 +368,10 @@ xfs_acl_iaccess( | |||
| 370 | 368 | ||
| 371 | STATIC int | 369 | STATIC int |
| 372 | xfs_acl_allow_set( | 370 | xfs_acl_allow_set( |
| 373 | vnode_t *vp, | 371 | bhv_vnode_t *vp, |
| 374 | int kind) | 372 | int kind) |
| 375 | { | 373 | { |
| 376 | vattr_t va; | 374 | bhv_vattr_t va; |
| 377 | int error; | 375 | int error; |
| 378 | 376 | ||
| 379 | if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) | 377 | if (vp->v_inode.i_flags & (S_IMMUTABLE|S_APPEND)) |
| @@ -383,7 +381,7 @@ xfs_acl_allow_set( | |||
| 383 | if (vp->v_vfsp->vfs_flag & VFS_RDONLY) | 381 | if (vp->v_vfsp->vfs_flag & VFS_RDONLY) |
| 384 | return EROFS; | 382 | return EROFS; |
| 385 | va.va_mask = XFS_AT_UID; | 383 | va.va_mask = XFS_AT_UID; |
| 386 | VOP_GETATTR(vp, &va, 0, NULL, error); | 384 | error = bhv_vop_getattr(vp, &va, 0, NULL); |
| 387 | if (error) | 385 | if (error) |
| 388 | return error; | 386 | return error; |
| 389 | if (va.va_uid != current->fsuid && !capable(CAP_FOWNER)) | 387 | if (va.va_uid != current->fsuid && !capable(CAP_FOWNER)) |
| @@ -606,7 +604,7 @@ xfs_acl_get_endian( | |||
| 606 | */ | 604 | */ |
| 607 | STATIC void | 605 | STATIC void |
| 608 | xfs_acl_get_attr( | 606 | xfs_acl_get_attr( |
| 609 | vnode_t *vp, | 607 | bhv_vnode_t *vp, |
| 610 | xfs_acl_t *aclp, | 608 | xfs_acl_t *aclp, |
| 611 | int kind, | 609 | int kind, |
| 612 | int flags, | 610 | int flags, |
| @@ -616,9 +614,9 @@ xfs_acl_get_attr( | |||
| 616 | 614 | ||
| 617 | ASSERT((flags & ATTR_KERNOVAL) ? (aclp == NULL) : 1); | 615 | ASSERT((flags & ATTR_KERNOVAL) ? (aclp == NULL) : 1); |
| 618 | flags |= ATTR_ROOT; | 616 | flags |= ATTR_ROOT; |
| 619 | VOP_ATTR_GET(vp, | 617 | *error = bhv_vop_attr_get(vp, kind == _ACL_TYPE_ACCESS ? |
| 620 | kind == _ACL_TYPE_ACCESS ? SGI_ACL_FILE : SGI_ACL_DEFAULT, | 618 | SGI_ACL_FILE : SGI_ACL_DEFAULT, |
| 621 | (char *)aclp, &len, flags, sys_cred, *error); | 619 | (char *)aclp, &len, flags, sys_cred); |
| 622 | if (*error || (flags & ATTR_KERNOVAL)) | 620 | if (*error || (flags & ATTR_KERNOVAL)) |
| 623 | return; | 621 | return; |
| 624 | xfs_acl_get_endian(aclp); | 622 | xfs_acl_get_endian(aclp); |
| @@ -629,7 +627,7 @@ xfs_acl_get_attr( | |||
| 629 | */ | 627 | */ |
| 630 | STATIC void | 628 | STATIC void |
| 631 | xfs_acl_set_attr( | 629 | xfs_acl_set_attr( |
| 632 | vnode_t *vp, | 630 | bhv_vnode_t *vp, |
| 633 | xfs_acl_t *aclp, | 631 | xfs_acl_t *aclp, |
| 634 | int kind, | 632 | int kind, |
| 635 | int *error) | 633 | int *error) |
| @@ -654,19 +652,19 @@ xfs_acl_set_attr( | |||
| 654 | INT_SET(newace->ae_perm, ARCH_CONVERT, ace->ae_perm); | 652 | INT_SET(newace->ae_perm, ARCH_CONVERT, ace->ae_perm); |
| 655 | } | 653 | } |
| 656 | INT_SET(newacl->acl_cnt, ARCH_CONVERT, aclp->acl_cnt); | 654 | INT_SET(newacl->acl_cnt, ARCH_CONVERT, aclp->acl_cnt); |
| 657 | VOP_ATTR_SET(vp, | 655 | *error = bhv_vop_attr_set(vp, kind == _ACL_TYPE_ACCESS ? |
| 658 | kind == _ACL_TYPE_ACCESS ? SGI_ACL_FILE: SGI_ACL_DEFAULT, | 656 | SGI_ACL_FILE: SGI_ACL_DEFAULT, |
| 659 | (char *)newacl, len, ATTR_ROOT, sys_cred, *error); | 657 | (char *)newacl, len, ATTR_ROOT, sys_cred); |
| 660 | _ACL_FREE(newacl); | 658 | _ACL_FREE(newacl); |
| 661 | } | 659 | } |
| 662 | 660 | ||
| 663 | int | 661 | int |
| 664 | xfs_acl_vtoacl( | 662 | xfs_acl_vtoacl( |
| 665 | vnode_t *vp, | 663 | bhv_vnode_t *vp, |
| 666 | xfs_acl_t *access_acl, | 664 | xfs_acl_t *access_acl, |
| 667 | xfs_acl_t *default_acl) | 665 | xfs_acl_t *default_acl) |
| 668 | { | 666 | { |
| 669 | vattr_t va; | 667 | bhv_vattr_t va; |
| 670 | int error = 0; | 668 | int error = 0; |
| 671 | 669 | ||
| 672 | if (access_acl) { | 670 | if (access_acl) { |
| @@ -678,7 +676,7 @@ xfs_acl_vtoacl( | |||
| 678 | if (!error) { | 676 | if (!error) { |
| 679 | /* Got the ACL, need the mode... */ | 677 | /* Got the ACL, need the mode... */ |
| 680 | va.va_mask = XFS_AT_MODE; | 678 | va.va_mask = XFS_AT_MODE; |
| 681 | VOP_GETATTR(vp, &va, 0, sys_cred, error); | 679 | error = bhv_vop_getattr(vp, &va, 0, sys_cred); |
| 682 | } | 680 | } |
| 683 | 681 | ||
| 684 | if (error) | 682 | if (error) |
| @@ -701,8 +699,8 @@ xfs_acl_vtoacl( | |||
| 701 | */ | 699 | */ |
| 702 | int | 700 | int |
| 703 | xfs_acl_inherit( | 701 | xfs_acl_inherit( |
| 704 | vnode_t *vp, | 702 | bhv_vnode_t *vp, |
| 705 | vattr_t *vap, | 703 | bhv_vattr_t *vap, |
| 706 | xfs_acl_t *pdaclp) | 704 | xfs_acl_t *pdaclp) |
| 707 | { | 705 | { |
| 708 | xfs_acl_t *cacl; | 706 | xfs_acl_t *cacl; |
| @@ -757,11 +755,11 @@ xfs_acl_inherit( | |||
| 757 | */ | 755 | */ |
| 758 | STATIC int | 756 | STATIC int |
| 759 | xfs_acl_setmode( | 757 | xfs_acl_setmode( |
| 760 | vnode_t *vp, | 758 | bhv_vnode_t *vp, |
| 761 | xfs_acl_t *acl, | 759 | xfs_acl_t *acl, |
| 762 | int *basicperms) | 760 | int *basicperms) |
| 763 | { | 761 | { |
| 764 | vattr_t va; | 762 | bhv_vattr_t va; |
| 765 | xfs_acl_entry_t *ap; | 763 | xfs_acl_entry_t *ap; |
| 766 | xfs_acl_entry_t *gap = NULL; | 764 | xfs_acl_entry_t *gap = NULL; |
| 767 | int i, error, nomask = 1; | 765 | int i, error, nomask = 1; |
| @@ -776,7 +774,7 @@ xfs_acl_setmode( | |||
| 776 | * mode. The m:: bits take precedence over the g:: bits. | 774 | * mode. The m:: bits take precedence over the g:: bits. |
| 777 | */ | 775 | */ |
| 778 | va.va_mask = XFS_AT_MODE; | 776 | va.va_mask = XFS_AT_MODE; |
| 779 | VOP_GETATTR(vp, &va, 0, sys_cred, error); | 777 | error = bhv_vop_getattr(vp, &va, 0, sys_cred); |
| 780 | if (error) | 778 | if (error) |
| 781 | return error; | 779 | return error; |
| 782 | 780 | ||
| @@ -810,8 +808,7 @@ xfs_acl_setmode( | |||
| 810 | if (gap && nomask) | 808 | if (gap && nomask) |
| 811 | va.va_mode |= gap->ae_perm << 3; | 809 | va.va_mode |= gap->ae_perm << 3; |
| 812 | 810 | ||
| 813 | VOP_SETATTR(vp, &va, 0, sys_cred, error); | 811 | return bhv_vop_setattr(vp, &va, 0, sys_cred); |
| 814 | return error; | ||
| 815 | } | 812 | } |
| 816 | 813 | ||
| 817 | /* | 814 | /* |
