diff options
| -rw-r--r-- | fs/ocfs2/dlmglue.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/fs/ocfs2/dlmglue.c b/fs/ocfs2/dlmglue.c index ac24f49ae2fb..ce8e061c9a22 100644 --- a/fs/ocfs2/dlmglue.c +++ b/fs/ocfs2/dlmglue.c | |||
| @@ -3392,9 +3392,17 @@ static int ocfs2_unblock_lock(struct ocfs2_super *osb, | |||
| 3392 | 3392 | ||
| 3393 | spin_lock_irqsave(&lockres->l_lock, flags); | 3393 | spin_lock_irqsave(&lockres->l_lock, flags); |
| 3394 | 3394 | ||
| 3395 | BUG_ON(!(lockres->l_flags & OCFS2_LOCK_BLOCKED)); | ||
| 3396 | |||
| 3397 | recheck: | 3395 | recheck: |
| 3396 | /* | ||
| 3397 | * Is it still blocking? If not, we have no more work to do. | ||
| 3398 | */ | ||
| 3399 | if (!(lockres->l_flags & OCFS2_LOCK_BLOCKED)) { | ||
| 3400 | BUG_ON(lockres->l_blocking != DLM_LOCK_NL); | ||
| 3401 | spin_unlock_irqrestore(&lockres->l_lock, flags); | ||
| 3402 | ret = 0; | ||
| 3403 | goto leave; | ||
| 3404 | } | ||
| 3405 | |||
| 3398 | if (lockres->l_flags & OCFS2_LOCK_BUSY) { | 3406 | if (lockres->l_flags & OCFS2_LOCK_BUSY) { |
| 3399 | /* XXX | 3407 | /* XXX |
| 3400 | * This is a *big* race. The OCFS2_LOCK_PENDING flag | 3408 | * This is a *big* race. The OCFS2_LOCK_PENDING flag |
