All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.