From: Maxim <[email protected]>

gfs2_write_begin() calls grab_cache_page_write_begin() that returns *locked*
page. Correspondent error-handling path lacks for unlock_page() call:

> out:
>       if (error == 0)
>               return 0;
>
>       page_cache_release(page);

The whole system hangs if gfs2_unstuff_dinode() called from gfs2_write_begin()
failed for some reason.

Reported-by: Maxim <[email protected]>
Signed-off-by: Maxim <[email protected]>
Signed-off-by: Steven Whitehouse <[email protected]>

diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
index 4f36f88..aad77e4 100644
--- a/fs/gfs2/aops.c
+++ b/fs/gfs2/aops.c
@@ -695,6 +695,7 @@ out:
        if (error == 0)
                return 0;
 
+       unlock_page(page);
        page_cache_release(page);
 
        gfs2_trans_end(sdp);
-- 
1.7.4

Reply via email to