[Ocfs2-devel] [PATCH] ocfs2: fix __ocfs2_cluster_lock() dead lock

Sunil Mushran sunil.mushran at oracle.com
Sat Jan 9 10:24:10 PST 2010


This needs testing. Joel has forwarded it to Fabbione who has a  
testcase that we believe triggers this issue. If that works, I'll push  
this in the 1.6 testing tree. That way we'll know (a) the patch fixes  
the problem, and (b) does not break other things. This is a tricky  
function. We are just being careful.


On Jan 9, 2010, at 10:05 AM, Wengang Wang <wen.gang.wang at oracle.com>  
wrote:

> On 10-01-06 18:00, Joel Becker wrote:
>> On Wed, Jan 06, 2010 at 04:34:44PM +0800, Wengang Wang wrote:
>>> there is deadlock possibility in __ocfs2_cluster_lock().
>>> the case is like following.
>>>
>>> #in time order
>>> 1) node A(the lock owner) is doing an up-convert(UC, PR->EX). it  
>>> got the lock
>>> but didn't check BUSY flag again.
>>>
>>> 2) node B requested an UC on the same lock resource. since node A  
>>> has an EX on
>>> the lockres, a bast is issued and OCFS2_LOCK_BLOCKED flag is set  
>>> to the lockres
>>> meanting that a DC is should be done. the DC asks for agreement of  
>>> node A to
>>> release EX. and for now node A refuses that(still in process of  
>>> getting that
>>> lock:) ).
>>>
>>> 3) the UC on node A runs into the phrase of checking  
>>> OCFS2_LOCK_BLOCKED flag and
>>> if it can continue without waiting for any DC. code is:
>>>
>>>        if (lockres->l_flags & OCFS2_LOCK_BLOCKED &&
>>>            !ocfs2_may_continue_on_blocked_lock(lockres, level)) {
>>>
>>> analysis:
>>> the BLOCKED flag is set in 2), and the UC can't continue to get  
>>> the lock(
>>> ocfs2_may_continue_on_blocked_lock() returns false), so it the DC  
>>> to finish.
>>>
>>> so both UC and DC are waiting for each other --a dead lock.
>>
>> 1) Do you have a test case?  Have you seen this happen, or are you  
>> just
>>   postulating from reading the code?
>> 2) It sure looks like you're right.
> well, this doesn't sounds like a sob :)
>
> regards,
> wengang.
>
> _______________________________________________
> Ocfs2-devel mailing list
> Ocfs2-devel at oss.oracle.com
> http://oss.oracle.com/mailman/listinfo/ocfs2-devel



More information about the Ocfs2-devel mailing list