diff options
Diffstat (limited to 'fs/reiserfs/xattr_acl.c')
| -rw-r--r-- | fs/reiserfs/xattr_acl.c | 69 |
1 files changed, 19 insertions, 50 deletions
diff --git a/fs/reiserfs/xattr_acl.c b/fs/reiserfs/xattr_acl.c index 35d6e672a279..cc32e6ada67b 100644 --- a/fs/reiserfs/xattr_acl.c +++ b/fs/reiserfs/xattr_acl.c | |||
| @@ -15,8 +15,10 @@ static int reiserfs_set_acl(struct reiserfs_transaction_handle *th, | |||
| 15 | struct posix_acl *acl); | 15 | struct posix_acl *acl); |
| 16 | 16 | ||
| 17 | static int | 17 | static int |
| 18 | xattr_set_acl(struct inode *inode, int type, const void *value, size_t size) | 18 | posix_acl_set(struct dentry *dentry, const char *name, const void *value, |
| 19 | size_t size, int flags, int type) | ||
| 19 | { | 20 | { |
| 21 | struct inode *inode = dentry->d_inode; | ||
| 20 | struct posix_acl *acl; | 22 | struct posix_acl *acl; |
| 21 | int error, error2; | 23 | int error, error2; |
| 22 | struct reiserfs_transaction_handle th; | 24 | struct reiserfs_transaction_handle th; |
| @@ -60,15 +62,16 @@ xattr_set_acl(struct inode *inode, int type, const void *value, size_t size) | |||
| 60 | } | 62 | } |
| 61 | 63 | ||
| 62 | static int | 64 | static int |
| 63 | xattr_get_acl(struct inode *inode, int type, void *buffer, size_t size) | 65 | posix_acl_get(struct dentry *dentry, const char *name, void *buffer, |
| 66 | size_t size, int type) | ||
| 64 | { | 67 | { |
| 65 | struct posix_acl *acl; | 68 | struct posix_acl *acl; |
| 66 | int error; | 69 | int error; |
| 67 | 70 | ||
| 68 | if (!reiserfs_posixacl(inode->i_sb)) | 71 | if (!reiserfs_posixacl(dentry->d_sb)) |
| 69 | return -EOPNOTSUPP; | 72 | return -EOPNOTSUPP; |
| 70 | 73 | ||
| 71 | acl = reiserfs_get_acl(inode, type); | 74 | acl = reiserfs_get_acl(dentry->d_inode, type); |
| 72 | if (IS_ERR(acl)) | 75 | if (IS_ERR(acl)) |
| 73 | return PTR_ERR(acl); | 76 | return PTR_ERR(acl); |
| 74 | if (acl == NULL) | 77 | if (acl == NULL) |
| @@ -482,30 +485,12 @@ int reiserfs_acl_chmod(struct inode *inode) | |||
| 482 | return error; | 485 | return error; |
| 483 | } | 486 | } |
| 484 | 487 | ||
| 485 | static int | 488 | static size_t posix_acl_access_list(struct dentry *dentry, char *list, |
| 486 | posix_acl_access_get(struct inode *inode, const char *name, | ||
| 487 | void *buffer, size_t size) | ||
| 488 | { | ||
| 489 | if (strlen(name) != sizeof(POSIX_ACL_XATTR_ACCESS) - 1) | ||
| 490 | return -EINVAL; | ||
| 491 | return xattr_get_acl(inode, ACL_TYPE_ACCESS, buffer, size); | ||
| 492 | } | ||
| 493 | |||
| 494 | static int | ||
| 495 | posix_acl_access_set(struct inode *inode, const char *name, | ||
| 496 | const void *value, size_t size, int flags) | ||
| 497 | { | ||
| 498 | if (strlen(name) != sizeof(POSIX_ACL_XATTR_ACCESS) - 1) | ||
| 499 | return -EINVAL; | ||
| 500 | return xattr_set_acl(inode, ACL_TYPE_ACCESS, value, size); | ||
| 501 | } | ||
| 502 | |||
| 503 | static size_t posix_acl_access_list(struct inode *inode, char *list, | ||
| 504 | size_t list_size, const char *name, | 489 | size_t list_size, const char *name, |
| 505 | size_t name_len) | 490 | size_t name_len, int type) |
| 506 | { | 491 | { |
| 507 | const size_t size = sizeof(POSIX_ACL_XATTR_ACCESS); | 492 | const size_t size = sizeof(POSIX_ACL_XATTR_ACCESS); |
| 508 | if (!reiserfs_posixacl(inode->i_sb)) | 493 | if (!reiserfs_posixacl(dentry->d_sb)) |
| 509 | return 0; | 494 | return 0; |
| 510 | if (list && size <= list_size) | 495 | if (list && size <= list_size) |
| 511 | memcpy(list, POSIX_ACL_XATTR_ACCESS, size); | 496 | memcpy(list, POSIX_ACL_XATTR_ACCESS, size); |
| @@ -514,35 +499,18 @@ static size_t posix_acl_access_list(struct inode *inode, char *list, | |||
| 514 | 499 | ||
| 515 | struct xattr_handler reiserfs_posix_acl_access_handler = { | 500 | struct xattr_handler reiserfs_posix_acl_access_handler = { |
| 516 | .prefix = POSIX_ACL_XATTR_ACCESS, | 501 | .prefix = POSIX_ACL_XATTR_ACCESS, |
| 517 | .get = posix_acl_access_get, | 502 | .flags = ACL_TYPE_ACCESS, |
| 518 | .set = posix_acl_access_set, | 503 | .get = posix_acl_get, |
| 504 | .set = posix_acl_set, | ||
| 519 | .list = posix_acl_access_list, | 505 | .list = posix_acl_access_list, |
| 520 | }; | 506 | }; |
| 521 | 507 | ||
| 522 | static int | 508 | static size_t posix_acl_default_list(struct dentry *dentry, char *list, |
| 523 | posix_acl_default_get(struct inode *inode, const char *name, | ||
| 524 | void *buffer, size_t size) | ||
| 525 | { | ||
| 526 | if (strlen(name) != sizeof(POSIX_ACL_XATTR_DEFAULT) - 1) | ||
| 527 | return -EINVAL; | ||
| 528 | return xattr_get_acl(inode, ACL_TYPE_DEFAULT, buffer, size); | ||
| 529 | } | ||
| 530 | |||
| 531 | static int | ||
| 532 | posix_acl_default_set(struct inode *inode, const char *name, | ||
| 533 | const void *value, size_t size, int flags) | ||
| 534 | { | ||
| 535 | if (strlen(name) != sizeof(POSIX_ACL_XATTR_DEFAULT) - 1) | ||
| 536 | return -EINVAL; | ||
| 537 | return xattr_set_acl(inode, ACL_TYPE_DEFAULT, value, size); | ||
| 538 | } | ||
| 539 | |||
| 540 | static size_t posix_acl_default_list(struct inode *inode, char *list, | ||
| 541 | size_t list_size, const char *name, | 509 | size_t list_size, const char *name, |
| 542 | size_t name_len) | 510 | size_t name_len, int type) |
| 543 | { | 511 | { |
| 544 | const size_t size = sizeof(POSIX_ACL_XATTR_DEFAULT); | 512 | const size_t size = sizeof(POSIX_ACL_XATTR_DEFAULT); |
| 545 | if (!reiserfs_posixacl(inode->i_sb)) | 513 | if (!reiserfs_posixacl(dentry->d_sb)) |
| 546 | return 0; | 514 | return 0; |
| 547 | if (list && size <= list_size) | 515 | if (list && size <= list_size) |
| 548 | memcpy(list, POSIX_ACL_XATTR_DEFAULT, size); | 516 | memcpy(list, POSIX_ACL_XATTR_DEFAULT, size); |
| @@ -551,7 +519,8 @@ static size_t posix_acl_default_list(struct inode *inode, char *list, | |||
| 551 | 519 | ||
| 552 | struct xattr_handler reiserfs_posix_acl_default_handler = { | 520 | struct xattr_handler reiserfs_posix_acl_default_handler = { |
| 553 | .prefix = POSIX_ACL_XATTR_DEFAULT, | 521 | .prefix = POSIX_ACL_XATTR_DEFAULT, |
| 554 | .get = posix_acl_default_get, | 522 | .flags = ACL_TYPE_DEFAULT, |
| 555 | .set = posix_acl_default_set, | 523 | .get = posix_acl_get, |
| 524 | .set = posix_acl_set, | ||
| 556 | .list = posix_acl_default_list, | 525 | .list = posix_acl_default_list, |
| 557 | }; | 526 | }; |
