diff mbox

[-V2] ext4: Mark the buffer_heads as dirty and uptodate after prepare_write

Message ID 1226063563-16220-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com
State Accepted, archived
Headers show

Commit Message

Aneesh Kumar K.V Nov. 7, 2008, 1:12 p.m. UTC
We need to make sure we mark the buffer_heads as dirty and uptodate
so that block_write_full_page write them correctly.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
---
 fs/ext4/inode.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

Comments

Theodore Ts'o Nov. 7, 2008, 1:33 p.m. UTC | #1
Per discussion on IRC, we've Aneesh and I have concluded that the V1
patch is correct, and in fact calling block_commit_write() when we
will be redirtying the page (a) can cause problems if one or more
buffer heads on the page is marked for delayed allocation and so
bh->block_nr is 0, and (b) wastes disk bandwidth since the page
contents will be potentially written out twice.

So we'll be going with the V1 version of the patch, and pushing it to
Linus ASAP.

						- Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 95d0d12..f9461d7 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -2333,6 +2333,15 @@  static int ext4_da_writepage(struct page *page,
 		ret = block_prepare_write(page, 0, PAGE_CACHE_SIZE,
 						ext4_normal_get_block_write);
 		if (!ret) {
+			/*
+			 * We mark the buffer_head dirty and uptodate even
+			 * if we are not doing a block_write_full_page. This
+			 * make sure when writeback see the page again with
+			 * buffer_head present the buffer_head would have
+			 * the right flags
+			 */
+			block_commit_write(page, 0, PAGE_CACHE_SIZE);
+
 			page_bufs = page_buffers(page);
 			/* check whether all are mapped and non delay */
 			if (walk_page_buffers(NULL, page_bufs, 0, len, NULL,