tmpfs not support O_DIRECT, when user open with O_DIRECT , the errno -EINVAL return to userspace by open_check_o_direct, but the file has been created, it's a strange thing. Add a checking for tmpfs that can avoid creating that file. Signed-off-by: weiping zhang <zhangweiping@xxxxxxxxxxxxxxx> --- fs/namei.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fs/namei.c b/fs/namei.c index ddb6a7c..a2a8cb9 100644 --- a/fs/namei.c +++ b/fs/namei.c @@ -3106,6 +3106,10 @@ static int lookup_open(struct nameidata *nd, struct path *path, if (unlikely(IS_DEADDIR(dir_inode))) return -ENOENT; + if (unlikely(open_flag & (O_CREAT | O_DIRECT) && + strcmp(dir->d_sb->s_type->name, "tmpfs") == 0)) + return -EINVAL; + *opened &= ~FILE_CREATED; dentry = d_lookup(dir, &nd->last); for (;;) { -- 2.9.4