ext4: convert write_begin methods to stable_page_writes semantics
authorDmitry Monakhov <dmonakhov@openvz.org>
Wed, 28 Aug 2013 18:30:47 +0000 (14:30 -0400)
committerAlex Shi <alex.shi@linaro.org>
Thu, 21 May 2015 02:10:28 +0000 (10:10 +0800)
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>
fs/ext4/inode.c

index d6382b89ecbde3077720ebc6a9bb56254883e2d7..e1892bb499cd519f3483c7cbb9d6b7a6f19d944e 100644 (file)
@@ -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) {