Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1f7bc828 authored by Mark Fasheh's avatar Mark Fasheh
Browse files

ocfs2: remove an overly aggressive BUG() in dlmfs



Don't BUG() user_dlm_unblock_lock() on the absence of the USER_LOCK_BLOCKED
flag - this turns out to be a valid case. Make some of the related BUG()
statements print more useful information.

Signed-off-by: default avatarMark Fasheh <mark.fasheh@oracle.com>
parent ab0920ce
Loading
Loading
Loading
Loading
+17 −4
Original line number Original line Diff line number Diff line
@@ -268,13 +268,26 @@ static void user_dlm_unblock_lock(void *opaque)


	spin_lock(&lockres->l_lock);
	spin_lock(&lockres->l_lock);


	BUG_ON(!(lockres->l_flags & USER_LOCK_BLOCKED));
	mlog_bug_on_msg(!(lockres->l_flags & USER_LOCK_QUEUED),
	BUG_ON(!(lockres->l_flags & USER_LOCK_QUEUED));
			"Lockres %s, flags 0x%x\n",
			lockres->l_name, lockres->l_flags);


	/* notice that we don't clear USER_LOCK_BLOCKED here. That's
	/* notice that we don't clear USER_LOCK_BLOCKED here. If it's
	 * for user_ast to do. */
	 * set, we want user_ast clear it. */
	lockres->l_flags &= ~USER_LOCK_QUEUED;
	lockres->l_flags &= ~USER_LOCK_QUEUED;


	/* It's valid to get here and no longer be blocked - if we get
	 * several basts in a row, we might be queued by the first
	 * one, the unblock thread might run and clear the queued
	 * flag, and finally we might get another bast which re-queues
	 * us before our ast for the downconvert is called. */
	if (!(lockres->l_flags & USER_LOCK_BLOCKED)) {
		mlog(0, "Lockres %s, flags 0x%x: queued but not blocking\n",
			lockres->l_name, lockres->l_flags);
		spin_unlock(&lockres->l_lock);
		goto drop_ref;
	}

	if (lockres->l_flags & USER_LOCK_IN_TEARDOWN) {
	if (lockres->l_flags & USER_LOCK_IN_TEARDOWN) {
		mlog(0, "lock is in teardown so we do nothing\n");
		mlog(0, "lock is in teardown so we do nothing\n");
		spin_unlock(&lockres->l_lock);
		spin_unlock(&lockres->l_lock);