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

Wengang Wang wen.gang.wang at oracle.com
Wed Jan 13 20:12:39 PST 2010


Hi,

On 10-01-13 17:01, Joel Becker wrote:
> On Wed, Jan 13, 2010 at 11:14:48AM -0800, Sunil Mushran wrote:
> > Joel Becker wrote:
> > > On Wed, Jan 13, 2010 at 11:20:49AM +0800, Wengang Wang wrote:
> > >> before update_holders, the lock could be DCed(since no BUSY flag set by
> > >> here).
> > >>
> > >> and even after update_holders, the lock could be DCed too.
> > >>
> > >> so that we get ocfs2_cluster_lock()(with holders increased) returned sucessfully
> > >> but actually we don't hold the dlm lock. --thus more than one node is
> > >> considering that they have the (EX) lock.
> > >
> > > 	You make a good point.  I don't like the solution you propose,
> > > though.  Another flag that's almost the same?  Eww!  There's got to be a
> > > better way.
> > 
> > I don't see how we can resolve this without another flag. It could
> > be a mirror image of the PENDING flag. PENDING takes care of the gap
> > between BUSY set and calling dlm_lock(). This flag has to take care
> > of the gap between BUSY clear and inc_holders.
> > 
> > Am working on improving Wengang's patch.
> 
thanks!

> 	I don't see anything yet, but PENDING is a complex enough flag
> as-is.  Another flag and we're even less understandable ;-(  If we have
> to do it, and I assume you'll set the flag in the ast when you clear
> BUSY, I say call it UPCONVERT_FINISHING.
> 	Oh, wait.  This means that we can drop the
> lock_attemped/lock_done state variable from wengang's original change.
> Right before ocfs2_cluster_lock checks for BLOCKING, it can just check
> flags&UPCONVERT_FINISHING and jump to inc_holders.  Maybe this is in
> wengang's update and I didn't notice.
> 

yes, we can drop that variable. and I didn't notice it in my update :P

regards,
wengang.



More information about the Ocfs2-devel mailing list