diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-24 23:02:42 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2009-06-24 23:02:42 +0200 |
commit | d5bb68adda7cc179e8efadeaa3a283cb470f13a6 (patch) | |
tree | bb50b072ba652699553b6a20dc00de4e951623cc /fs/jfs | |
parent | Get "no acls for this inode" right, fix shmem breakage (diff) | |
download | linux-d5bb68adda7cc179e8efadeaa3a283cb470f13a6.tar.xz linux-d5bb68adda7cc179e8efadeaa3a283cb470f13a6.zip |
another race fix in jfs_check_acl()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/jfs')
-rw-r--r-- | fs/jfs/acl.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/jfs/acl.c b/fs/jfs/acl.c index f272bf032e1e..91fa3ad6e8c2 100644 --- a/fs/jfs/acl.c +++ b/fs/jfs/acl.c @@ -118,15 +118,16 @@ out: static int jfs_check_acl(struct inode *inode, int mask) { - if (inode->i_acl == ACL_NOT_CACHED) { - struct posix_acl *acl = jfs_get_acl(inode, ACL_TYPE_ACCESS); - if (IS_ERR(acl)) - return PTR_ERR(acl); + struct posix_acl *acl = jfs_get_acl(inode, ACL_TYPE_ACCESS); + + if (IS_ERR(acl)) + return PTR_ERR(acl); + if (acl) { + int error = posix_acl_permission(inode, acl, mask); posix_acl_release(acl); + return error; } - if (inode->i_acl) - return posix_acl_permission(inode, inode->i_acl, mask); return -EAGAIN; } |