]> git.neil.brown.name Git - history.git/commitdiff
[PATCH] cont_prepare_write() fix
authorHirofumi Ogawa <hirofumi@mail.parknet.co.jp>
Wed, 1 Dec 2004 09:09:25 +0000 (01:09 -0800)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Wed, 1 Dec 2004 09:09:25 +0000 (01:09 -0800)
When cont_prepare_write() is padding out the "hole" with zeroed pages it
doesn't increase i_size at the same time.  If writeback comes in during the
execution of cont_prepare_write(), block_write_full_page() will think that
these pages are outside i_size and will just clean the page without writing
it.

Fix that up by using generic_commit_write(), which will advance i_size for
each page as it is dirtied.

Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
fs/buffer.c

index 0d1cc3e09aee740aaa021e35d81a113b41b20493..0e259f7336fbca366bc1fe7b6033c274abd24450 100644 (file)
@@ -2224,8 +2224,7 @@ int cont_prepare_write(struct page *page, unsigned offset,
                memset(kaddr+zerofrom, 0, PAGE_CACHE_SIZE-zerofrom);
                flush_dcache_page(new_page);
                kunmap_atomic(kaddr, KM_USER0);
-               __block_commit_write(inode, new_page,
-                               zerofrom, PAGE_CACHE_SIZE);
+               generic_commit_write(NULL, new_page, zerofrom, PAGE_CACHE_SIZE);
                unlock_page(new_page);
                page_cache_release(new_page);
        }