[Cluster-devel] [PATCH] unlock page lock before doing a dq

Josef Bacik jbacik at redhat.com
Sat Sep 8 14:25:28 UTC 2007


Hello,

There is a lockup condition where we get an error while perparing to write (such
as ENOSPC) and we go to do the gfs2_glock_dq_m and the glock has been marked
dirty.  Since we are already holding the page lock, we will deadlock because we
will try to flush all the pages back to disk and try to take the pagelock again.
Wendy you said I would be doing this in a transaction, but if there as error
inside where we started the transaction, we goto out, where we stop the
transaction first and then go on and unlock the page.  This fixes RH bz 280791.
Thank you,

Josef

--- 18.34/fs/gfs2/ops_address.c.josef	2007-09-07 15:07:03.000000000 -0400
+++ 18.34/fs/gfs2/ops_address.c	2007-09-07 15:12:45.000000000 -0400
@@ -457,8 +457,10 @@ out_alloc_put:
 			gfs2_alloc_put(ip);
 		}
 out_unlock:
+		unlock_page(page);
 		gfs2_glock_dq_m(1, &ip->i_gh);
 		gfs2_holder_uninit(&ip->i_gh);
+		lock_page(page);
 	}
 
 	return error;




More information about the Cluster-devel mailing list