This patch checks for and prevents the deadlock with a page in journalled writeback in ext4_try_to_write_inline_data(). Finally, add wait_on_page_writeback() if data=journal mode. Signed-off-by: Mauricio Faria de Oliveira <mfo@xxxxxxxxxxxxx> --- fs/ext4/inline.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fs/ext4/inline.c b/fs/ext4/inline.c index 3d370b04a740..c55a11f515d3 100644 --- a/fs/ext4/inline.c +++ b/fs/ext4/inline.c @@ -710,6 +710,8 @@ int ext4_try_to_write_inline_data(struct address_space *mapping, handle = NULL; goto out; } + if (ext4_should_journal_data(inode)) + wait_on_page_writeback(page); unlock_page(page); /* @@ -732,9 +734,18 @@ int ext4_try_to_write_inline_data(struct address_space *mapping, put_page(page); ext4_journal_stop(handle); goto retry_grab; + } else if (ext4_should_journal_data(inode) && + ext4_check_journalled_writeback(handle, page)) { + unlock_page(page); + put_page(page); + ext4_journal_stop(handle); + ext4_start_commit_datasync(inode); + goto retry_grab; } /* In case writeback began while the page was unlocked */ wait_for_stable_page(page); + if (ext4_should_journal_data(inode)) + wait_on_page_writeback(page); ret = ext4_prepare_inline_data(handle, inode, pos + len); if (ret) { -- 2.20.1