Patchwork [Bug,16165] Wrong data returned on read after write if file size was changed with ftruncate before

login
register
mail settings
Submitter bugzilla-daemon@bugzilla.kernel.org
Date June 18, 2010, 3:30 p.m.
Message ID <201006181530.o5IFUIZh002098@demeter.kernel.org>
Download mbox | patch
Permalink /patch/56204/
State New
Headers show

Comments

bugzilla-daemon@bugzilla.kernel.org - June 18, 2010, 3:30 p.m.
https://bugzilla.kernel.org/show_bug.cgi?id=16165





--- Comment #12 from Eric Sandeen <sandeen@redhat.com>  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 <cmm@us.ibm.com>
---
 fs/direct-io.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Patch

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;