diff options
Diffstat (limited to 'fs/ext3/acl.c')
-rw-r--r-- | fs/ext3/acl.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/fs/ext3/acl.c b/fs/ext3/acl.c index 8a11fe212183..9d021c0d472a 100644 --- a/fs/ext3/acl.c +++ b/fs/ext3/acl.c | |||
@@ -240,10 +240,17 @@ ext3_set_acl(handle_t *handle, struct inode *inode, int type, | |||
240 | } | 240 | } |
241 | 241 | ||
242 | int | 242 | int |
243 | ext3_check_acl(struct inode *inode, int mask) | 243 | ext3_check_acl(struct inode *inode, int mask, unsigned int flags) |
244 | { | 244 | { |
245 | struct posix_acl *acl = ext3_get_acl(inode, ACL_TYPE_ACCESS); | 245 | struct posix_acl *acl; |
246 | |||
247 | if (flags & IPERM_FLAG_RCU) { | ||
248 | if (!negative_cached_acl(inode, ACL_TYPE_ACCESS)) | ||
249 | return -ECHILD; | ||
250 | return -EAGAIN; | ||
251 | } | ||
246 | 252 | ||
253 | acl = ext3_get_acl(inode, ACL_TYPE_ACCESS); | ||
247 | if (IS_ERR(acl)) | 254 | if (IS_ERR(acl)) |
248 | return PTR_ERR(acl); | 255 | return PTR_ERR(acl); |
249 | if (acl) { | 256 | if (acl) { |
@@ -428,7 +435,7 @@ ext3_xattr_set_acl(struct dentry *dentry, const char *name, const void *value, | |||
428 | return -EINVAL; | 435 | return -EINVAL; |
429 | if (!test_opt(inode->i_sb, POSIX_ACL)) | 436 | if (!test_opt(inode->i_sb, POSIX_ACL)) |
430 | return -EOPNOTSUPP; | 437 | return -EOPNOTSUPP; |
431 | if (!is_owner_or_cap(inode)) | 438 | if (!inode_owner_or_capable(inode)) |
432 | return -EPERM; | 439 | return -EPERM; |
433 | 440 | ||
434 | if (value) { | 441 | if (value) { |