[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1461472078-20104-1-git-send-email-tytso@mit.edu>
Date: Sun, 24 Apr 2016 00:27:58 -0400
From: Theodore Ts'o <tytso@....edu>
To: Ext4 Developers List <linux-ext4@...r.kernel.org>
Cc: Theodore Ts'o <tytso@....edu>
Subject: [PATCH] ext4: refuse O_DIRECT opens for mode where DIO doesn't work
Certain ext4 modes (encryption, data=journal, inline data) cause
Direct I/O to be a no-op. Instead of making DIO fail silently, make
the open with the O_DIRECT flag fail with EINVAL.
This will avoid surprises to application programs, and also signal to
xfstests not to try O_DIRECT tests for file system modes where it
doesn't work (and could result in test failures).
Signed-off-by: Theodore Ts'o <tytso@....edu>
---
fs/ext4/file.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index fa2208b..4113676 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -372,7 +372,12 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
return -EACCES;
if (ext4_encryption_info(inode) == NULL)
return -ENOKEY;
+ if (filp->f_flags & O_DIRECT)
+ return -EINVAL;
}
+ if ((ext4_should_journal_data(inode) || ext4_has_inline_data(inode)) &&
+ (filp->f_flags & O_DIRECT))
+ return -EINVAL;
dir = dget_parent(file_dentry(filp));
if (ext4_encrypted_inode(d_inode(dir)) &&
--
2.5.0
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists