Message ID | 1226063563-16220-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com |
---|---|
State | Accepted, archived |
Headers | show |
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 --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,
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(-)