aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/generic_acl.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/fs/generic_acl.c b/fs/generic_acl.c
index 628004282130..06c48a891832 100644
--- a/fs/generic_acl.c
+++ b/fs/generic_acl.c
@@ -192,16 +192,18 @@ generic_acl_chmod(struct inode *inode)
192int 192int
193generic_check_acl(struct inode *inode, int mask, unsigned int flags) 193generic_check_acl(struct inode *inode, int mask, unsigned int flags)
194{ 194{
195 struct posix_acl *acl; 195 if (flags & IPERM_FLAG_RCU) {
196 196 if (!negative_cached_acl(inode, ACL_TYPE_ACCESS))
197 if (flags & IPERM_FLAG_RCU) 197 return -ECHILD;
198 return -ECHILD; 198 } else {
199 199 struct posix_acl *acl;
200 acl = get_cached_acl(inode, ACL_TYPE_ACCESS); 200
201 if (acl) { 201 acl = get_cached_acl(inode, ACL_TYPE_ACCESS);
202 int error = posix_acl_permission(inode, acl, mask); 202 if (acl) {
203 posix_acl_release(acl); 203 int error = posix_acl_permission(inode, acl, mask);
204 return error; 204 posix_acl_release(acl);
205 return error;
206 }
205 } 207 }
206 return -EAGAIN; 208 return -EAGAIN;
207} 209}