]> err.no Git - linux-2.6/commitdiff
[GFS2] Unlock page on prepare_write try lock failure
authorSteven Whitehouse <swhiteho@redhat.com>
Wed, 7 Feb 2007 15:25:59 +0000 (10:25 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Wed, 7 Feb 2007 15:25:59 +0000 (10:25 -0500)
When the try lock of the glock failed in prepare_write we were
incorrectly exiting this function with the page still locked.
This was resulting in further I/O to this page hanging.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/ops_address.c

index 9ddf9753a552c86cf14cb675ce856f53646902f6..5e9653c4d8867ab2994d54044db6120b2da469d3 100644 (file)
@@ -360,8 +360,10 @@ static int gfs2_prepare_write(struct file *file, struct page *page,
        gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_ATIME|LM_FLAG_TRY_1CB, &ip->i_gh);
        error = gfs2_glock_nq_atime(&ip->i_gh);
        if (unlikely(error)) {
-               if (error == GLR_TRYFAILED)
+               if (error == GLR_TRYFAILED) {
+                       unlock_page(page);
                        error = AOP_TRUNCATED_PAGE;
+               }
                goto out_uninit;
        }