| From d4ed91275abd6adef2149e9bb824076ec75638fe Mon Sep 17 00:00:00 2001 |
| From: Peng Tao <bergwolf@gmail.com> |
| Date: Mon, 10 Aug 2009 23:05:28 -0400 |
| Subject: [PATCH 05/85] 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 <bergwolf@gmail.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| --- |
| fs/ext4/move_extent.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- 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); |