aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorDmitry Monakhov <dmonakhov@openvz.org>2013-08-28 14:30:47 -0400
committerAlex Shi <alex.shi@linaro.org>2015-05-21 10:10:28 +0800
commit16b1fe2ce62d6238acb13fbe59b4fc13b51b1445 (patch)
tree0ff14e0da0aae3303c45565405a8362d7fbc8b31 /fs
parentb775702bdb7b95bd03bc0b4cdbcd11650ea3a3f6 (diff)
downloadlinux-linaro-stable-16b1fe2ce62d6238acb13fbe59b4fc13b51b1445.tar.gz
ext4: convert write_begin methods to stable_page_writes semanticsv3.10/topic/misc
Use wait_for_stable_page() instead of wait_on_page_writeback() Huawei engineer Jianfeng report that without this patch, the consequence write may cause seconds to finish. The patch helps because most of storage today doesn't require that the page isn't changed while IO is in flight. That is required only for data checksumming or copy-on-write semantics but ext4 does neither of those. So we don't have to wait for IO completion in ext4_write_begin() unless underlying storage requires it. --Honza Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> Reviewed-by: Jan Kara <jack@suse.cz> (cherry picked from commit 7afe5aa59ed3da7b6161617e7f157c7c680dc41e) Signed-off-by: Alex Shi <alex.shi@linaro.org>
Diffstat (limited to 'fs')
-rw-r--r--fs/ext4/inode.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
index d6382b89ecbd..e1892bb499cd 100644
--- a/fs/ext4/inode.c
+++ b/fs/ext4/inode.c
@@ -1029,7 +1029,8 @@ retry_journal:
ext4_journal_stop(handle);
goto retry_grab;
}
- wait_on_page_writeback(page);
+ /* In case writeback began while the page was unlocked */
+ wait_for_stable_page(page);
if (ext4_should_dioread_nolock(inode))
ret = __block_write_begin(page, pos, len, ext4_get_block_write);
@@ -2720,7 +2721,7 @@ retry_journal:
goto retry_grab;
}
/* In case writeback began while the page was unlocked */
- wait_on_page_writeback(page);
+ wait_for_stable_page(page);
ret = __block_write_begin(page, pos, len, ext4_da_get_block_prep);
if (ret < 0) {