summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorMiklos Szeredi <mszeredi@suse.cz>2013-10-01 16:41:23 +0200
committerMiklos Szeredi <mszeredi@suse.cz>2013-10-01 16:41:23 +0200
commit698fa1d163c560343b8012a0a916440d076b6c8a (patch)
treec71270827595520732a4a7f5ffd9f6fc79596b4c /fs
parent6314efee3cfeea2da12dbc05edfa20e5a42391bd (diff)
downloadlwn-698fa1d163c560343b8012a0a916440d076b6c8a.tar.gz
lwn-698fa1d163c560343b8012a0a916440d076b6c8a.zip
fuse: no RCU mode in fuse_access()
fuse_access() is never called in RCU walk, only on the final component of access(2) and chdir(2)... Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Diffstat (limited to 'fs')
-rw-r--r--fs/fuse/dir.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index a75159846a75..b7989f2ab4c4 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1068,6 +1068,8 @@ static int fuse_access(struct inode *inode, int mask)
struct fuse_access_in inarg;
int err;
+ BUG_ON(mask & MAY_NOT_BLOCK);
+
if (fc->no_access)
return 0;
@@ -1155,9 +1157,6 @@ static int fuse_permission(struct inode *inode, int mask)
noticed immediately, only after the attribute
timeout has expired */
} else if (mask & (MAY_ACCESS | MAY_CHDIR)) {
- if (mask & MAY_NOT_BLOCK)
- return -ECHILD;
-
err = fuse_access(inode, mask);
} else if ((mask & MAY_EXEC) && S_ISREG(inode->i_mode)) {
if (!(inode->i_mode & S_IXUGO)) {