fs: dlm: warn about messages from left nodes
authorAlexander Aring <aahringo@redhat.com>
Mon, 29 May 2023 21:44:36 +0000 (17:44 -0400)
committerDavid Teigland <teigland@redhat.com>
Wed, 14 Jun 2023 15:17:33 +0000 (10:17 -0500)
This patch warns about messages which are received from nodes who
already left the lockspace resource signaled by the cluster manager.
Before commit 489d8e559c65 ("fs: dlm: add reliable connection if
reconnect") there was a synchronization issue with the socket
lifetime and the cluster event of leaving a lockspace and other
nodes did not stop of sending messages because the cluster manager has a
pending message to leave the lockspace. The reliable session layer for
dlm use sequence numbers to ensure dlm message were never being dropped.
If this is not corrected synchronized we have a problem, this patch will
use the filter case and turn it into a WARN_ON_ONCE() so we seeing such
issue on the kernel log because it should never happen now.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/lock.c

index debf8a55ad7d9b56428703f79f3b07884281b1f5..ede903246fa403f169641f2125158da111bffc50 100644 (file)
@@ -4616,7 +4616,7 @@ static void _receive_message(struct dlm_ls *ls, struct dlm_message *ms,
 {
        int error = 0, noent = 0;
 
-       if (!dlm_is_member(ls, le32_to_cpu(ms->m_header.h_nodeid))) {
+       if (WARN_ON_ONCE(!dlm_is_member(ls, le32_to_cpu(ms->m_header.h_nodeid)))) {
                log_limit(ls, "receive %d from non-member %d %x %x %d",
                          le32_to_cpu(ms->m_type),
                          le32_to_cpu(ms->m_header.h_nodeid),
@@ -4754,7 +4754,7 @@ static void dlm_receive_message(struct dlm_ls *ls, struct dlm_message *ms,
                /* If we were a member of this lockspace, left, and rejoined,
                   other nodes may still be sending us messages from the
                   lockspace generation before we left. */
-               if (!ls->ls_generation) {
+               if (WARN_ON_ONCE(!ls->ls_generation)) {
                        log_limit(ls, "receive %d from %d ignore old gen",
                                  le32_to_cpu(ms->m_type), nodeid);
                        return;