From: Peng Tao Date: Tue, 11 Aug 2009 03:05:28 +0000 (-0400) Subject: ext4: fix journal ref count in move_extent_par_page X-Git-Tag: v2.6.31.8~86 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=8be78bc620adf972f6d33bc6202ba1b85fdd4db5;p=karo-tx-linux.git ext4: fix journal ref count in move_extent_par_page (cherry picked from commit 91cc219ad963731191247c5f2db4118be2bc341a) move_extent_par_page calls a_ops->write_begin() to increase journal handler's reference count. However, if either mext_replace_branches() or ext4_get_block fails, the increased reference count isn't decreased. This will cause a later attempt to umount of the fs to hang forever. The patch addresses the issue by calling ext4_journal_stop() if page is not NULL (which means a_ops->write_end() isn't invoked). Signed-off-by: Peng Tao Signed-off-by: "Theodore Ts'o" Signed-off-by: Greg Kroah-Hartman --- diff --git a/fs/ext4/move_extent.c b/fs/ext4/move_extent.c index bbf2dd9404dc..5821e0bee917 100644 --- a/fs/ext4/move_extent.c +++ b/fs/ext4/move_extent.c @@ -871,6 +871,7 @@ out: if (PageLocked(page)) unlock_page(page); page_cache_release(page); + ext4_journal_stop(handle); } out2: ext4_journal_stop(handle);