From patchwork Fri Jun 18 15:30:18 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [Bug, 16165] Wrong data returned on read after write if file size was changed with ftruncate before Date: Fri, 18 Jun 2010 05:30:18 -0000 From: bugzilla-daemon@bugzilla.kernel.org X-Patchwork-Id: 56204 Message-Id: <201006181530.o5IFUIZh002098@demeter.kernel.org> To: linux-ext4@vger.kernel.org https://bugzilla.kernel.org/show_bug.cgi?id=16165 --- Comment #12 from Eric Sandeen 2010-06-18 15:30:13 --- Can those who can reproduce this test this patch from mingming? When unaligned DIO writes, skip zero out the block if the buffer is marked unwritten. That means there is an asynconous direct IO (append or fill the hole) still pending. Signed-off-by: Mingming Cao --- fs/direct-io.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) Index: linux-git/fs/direct-io.c =================================================================== --- linux-git.orig/fs/direct-io.c 2010-05-07 15:42:22.855033403 -0700 +++ linux-git/fs/direct-io.c 2010-05-07 15:44:17.695007770 -0700 @@ -740,7 +740,8 @@ struct page *page; dio->start_zero_done = 1; - if (!dio->blkfactor || !buffer_new(&dio->map_bh)) + if (!dio->blkfactor || !buffer_new(&dio->map_bh) + || buffer_unwritten(&dio->map_bh)) return; dio_blocks_per_fs_block = 1 << dio->blkfactor;