summaryrefslogtreecommitdiffstats
path: root/fs/fuse/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2005-09-30 11:59:02 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2005-09-30 12:41:18 -0700
commitdd190d066b7ded8c44b2b67dd0a14bed01525d3c (patch)
treea76e0425ca910b3f0bf6c773349004feceba27f3 /fs/fuse/file.c
parentdaa35edc0a967d1f77c2e2c1346f57d04371487a (diff)
downloadlinux-dd190d066b7ded8c44b2b67dd0a14bed01525d3c.tar.gz
linux-dd190d066b7ded8c44b2b67dd0a14bed01525d3c.tar.bz2
linux-dd190d066b7ded8c44b2b67dd0a14bed01525d3c.zip
[PATCH] fuse: check O_DIRECT
Check O_DIRECT and return -EINVAL error in open. dentry_open() also checks this but only after the open method is called. This patch optimizes away the unnecessary upcalls in this case. It could be a correctness issue too: if filesystem has open() with side effect, then it should fail before doing the open, not after. Signed-off-by: Miklos Szeredi <miklos@szeredi.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'fs/fuse/file.c')
-rw-r--r--fs/fuse/file.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index 6454022b0536..657ab11c173b 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -23,6 +23,10 @@ int fuse_open_common(struct inode *inode, struct file *file, int isdir)
struct fuse_file *ff;
int err;
+ /* VFS checks this, but only _after_ ->open() */
+ if (file->f_flags & O_DIRECT)
+ return -EINVAL;
+
err = generic_file_open(inode, file);
if (err)
return err;