fuse: no RCU mode in fuse_access()
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 1 Oct 2013 14:41:23 +0000 (16:41 +0200)
committerMiklos Szeredi <mszeredi@suse.cz>
Tue, 1 Oct 2013 14:41:23 +0000 (16:41 +0200)
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>
fs/fuse/dir.c

index a75159846a75b8ddf335dcea0a118c6641920844..b7989f2ab4c471f92238fa29d50e7b6d357d8c87 100644 (file)
@@ -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)) {