From: Dmitry Monakhov Date: Wed, 28 Aug 2013 18:30:47 +0000 (-0400) Subject: ext4: convert write_begin methods to stable_page_writes semantics X-Git-Tag: firefly_0821_release~3680^2~6^2^2 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=16b1fe2ce62d6238acb13fbe59b4fc13b51b1445;p=firefly-linux-kernel-4.4.55.git ext4: convert write_begin methods to stable_page_writes semantics 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 Signed-off-by: "Theodore Ts'o" Reviewed-by: Jan Kara (cherry picked from commit 7afe5aa59ed3da7b6161617e7f157c7c680dc41e) Signed-off-by: Alex Shi --- 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) {