diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-09-30 11:59:02 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-30 12:41:18 -0700 |
commit | dd190d066b7ded8c44b2b67dd0a14bed01525d3c (patch) | |
tree | a76e0425ca910b3f0bf6c773349004feceba27f3 /fs/fuse | |
parent | daa35edc0a967d1f77c2e2c1346f57d04371487a (diff) | |
download | lwn-dd190d066b7ded8c44b2b67dd0a14bed01525d3c.tar.gz lwn-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')
-rw-r--r-- | fs/fuse/file.c | 4 |
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; |