ocfs2: Remove overzealous BUG_ON during blocked lock processing
During blocked lock processing, we should consider the possibility that the lock is no longer blocking. Joel Becker <joel.becker@oracle.com> assisted in fixing this issue. Reported-by: David Teigland <teigland@redhat.com> Signed-off-by: Sunil Mushran <sunil.mushran@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
This commit is contained in:
parent
0d74125a6a
commit
db0f6ce697
@ -3392,9 +3392,17 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb,
|
|||||||
|
|
||||||
spin_lock_irqsave(&lockres->l_lock, flags);
|
spin_lock_irqsave(&lockres->l_lock, flags);
|
||||||
|
|
||||||
BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED));
|
|
||||||
|
|
||||||
recheck:
|
recheck:
|
||||||
|
/*
|
||||||
|
* Is it still blocking? If not, we have no more work to do.
|
||||||
|
*/
|
||||||
|
if (!(lockres->l_flags & OCFS2_LOCK_BLOCKED)) {
|
||||||
|
BUG_ON(lockres->l_blocking != DLM_LOCK_NL);
|
||||||
|
spin_unlock_irqrestore(&lockres->l_lock, flags);
|
||||||
|
ret = 0;
|
||||||
|
goto leave;
|
||||||
|
}
|
||||||
|
|
||||||
if (lockres->l_flags & OCFS2_LOCK_BUSY) {
|
if (lockres->l_flags & OCFS2_LOCK_BUSY) {
|
||||||
/* XXX
|
/* XXX
|
||||||
* This is a *big* race. The OCFS2_LOCK_PENDING flag
|
* This is a *big* race. The OCFS2_LOCK_PENDING flag
|
||||||
|
Loading…
x
Reference in New Issue
Block a user