linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH] ext4:  Update i_diskzie during writepage for delayed allocation.
@ 2008-03-21  6:18 Aneesh Kumar K.V
  2008-03-21  6:18 ` [RFC PATCH] ext4: Return unwritten buffer head when trying to read from prealloc space Aneesh Kumar K.V
  2008-03-21 22:08 ` [RFC PATCH] ext4: Update i_diskzie during writepage for delayed allocation Mingming Cao
  0 siblings, 2 replies; 6+ messages in thread
From: Aneesh Kumar K.V @ 2008-03-21  6:18 UTC (permalink / raw)
  To: cmm, tytso, sandeen, Solofo.Ramangalahy, dmonakhov
  Cc: linux-ext4, Aneesh Kumar K.V

We need to update i_disksize after allocating blocks. writepages
already does this. Update writepage to also  update i_disksize.

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

diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index 79930df..50d700f 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1488,6 +1488,44 @@ out:
 
 	return ret;
 }
+/* FIXME!! only support data=writeback mode */
+static int ext4_da_writepage(struct page *page,
+				struct writeback_control *wbc)
+{
+	struct inode *inode = page->mapping->host;
+	handle_t *handle = NULL;
+	int ret = 0;
+	int err;
+
+	if (ext4_journal_current_handle())
+		goto out_fail;
+
+	handle = ext4_journal_start(inode, ext4_writepage_trans_blocks(inode));
+	if (IS_ERR(handle)) {
+		ret = PTR_ERR(handle);
+		goto out_fail;
+	}
+
+	if (test_opt(inode->i_sb, NOBH) && ext4_should_writeback_data(inode))
+		ret = nobh_writepage(page, ext4_get_block, wbc);
+	else
+		ret = block_write_full_page(page, ext4_get_block, wbc);
+
+	if (!ret && inode->i_size > EXT4_I(inode)->i_disksize) {
+		EXT4_I(inode)->i_disksize = inode->i_size;
+		ext4_mark_inode_dirty(handle, inode);
+	}
+
+	err = ext4_journal_stop(handle);
+	if (!ret)
+		ret = err;
+	return ret;
+
+out_fail:
+	redirty_page_for_writepage(wbc, page);
+	unlock_page(page);
+	return ret;
+}
 
 static int ext4_da_writepages(struct address_space *mapping,
 				struct writeback_control *wbc)
@@ -2015,7 +2053,7 @@ static const struct address_space_operations ext4_journalled_aops = {
 static const struct address_space_operations ext4_da_aops = {
 	.readpage	= ext4_readpage,
 	.readpages	= ext4_readpages,
-	.writepage	= ext4_writeback_writepage,
+	.writepage	= ext4_da_writepage,
 	.writepages	= ext4_da_writepages,
 	.sync_page	= block_sync_page,
 	.write_begin	= ext4_da_write_begin,
-- 
1.5.5.rc0.16.g02b00.dirty


^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-03-24 16:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-03-21  6:18 [RFC PATCH] ext4: Update i_diskzie during writepage for delayed allocation Aneesh Kumar K.V
2008-03-21  6:18 ` [RFC PATCH] ext4: Return unwritten buffer head when trying to read from prealloc space Aneesh Kumar K.V
2008-03-21 22:13   ` Mingming Cao
2008-03-24  8:11     ` Aneesh Kumar K.V
2008-03-24 16:04       ` Mingming Cao
2008-03-21 22:08 ` [RFC PATCH] ext4: Update i_diskzie during writepage for delayed allocation Mingming Cao

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).