This patch clears the DLM_IFL_CB_PENDING_BIT flag which will be set when
there is callback work queued when there was no callback to dequeue. It
is a buggy case and should never happen, that's why there is a
WARN_ON(). However if the case happens we are prepared to somehow
recover from it.
Cc: stable@vger.kernel.org
Fixes: 61bed0baa4db ("fs: dlm: use a non-static queue for callbacks")
Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
 
        spin_lock(&lkb->lkb_cb_lock);
        rv = dlm_dequeue_lkb_callback(lkb, &cb);
-       spin_unlock(&lkb->lkb_cb_lock);
-
-       if (WARN_ON_ONCE(rv == DLM_DEQUEUE_CALLBACK_EMPTY))
+       if (WARN_ON_ONCE(rv == DLM_DEQUEUE_CALLBACK_EMPTY)) {
+               clear_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags);
+               spin_unlock(&lkb->lkb_cb_lock);
                goto out;
+       }
+       spin_unlock(&lkb->lkb_cb_lock);
 
        for (;;) {
                castfn = lkb->lkb_astfn;