From 03a294e3c0c22135da5bcf3fd90a02e335fd9fd1 Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Wed, 31 Aug 2011 11:56:51 -0400 Subject: [PATCH] --- yaml --- r: 273092 b: refs/heads/master c: 84ebd795613488992b273220c2937d575d27d2a9 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/ext4/inode.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 666191e8afc4..bec60980f35a 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 1cd9f0976aa4606db8d6e3dc3edd0aca8019372a +refs/heads/master: 84ebd795613488992b273220c2937d575d27d2a9 diff --git a/trunk/fs/ext4/inode.c b/trunk/fs/ext4/inode.c index 18d2558b7624..b84f127c085d 100644 --- a/trunk/fs/ext4/inode.c +++ b/trunk/fs/ext4/inode.c @@ -2854,6 +2854,12 @@ static ssize_t ext4_direct_IO(int rw, struct kiocb *iocb, struct inode *inode = file->f_mapping->host; ssize_t ret; + /* + * If we are doing data journalling we don't support O_DIRECT + */ + if (ext4_should_journal_data(inode)) + return 0; + trace_ext4_direct_IO_enter(inode, offset, iov_length(iov, nr_segs), rw); if (ext4_test_inode_flag(inode, EXT4_INODE_EXTENTS)) ret = ext4_ext_direct_IO(rw, iocb, iov, offset, nr_segs); @@ -2923,6 +2929,7 @@ static const struct address_space_operations ext4_journalled_aops = { .bmap = ext4_bmap, .invalidatepage = ext4_invalidatepage, .releasepage = ext4_releasepage, + .direct_IO = ext4_direct_IO, .is_partially_uptodate = block_is_partially_uptodate, .error_remove_page = generic_error_remove_page, };