fs: dlm: don't set stop rx flag after node reset
authorAlexander Aring <aahringo@redhat.com>
Thu, 12 Jan 2023 22:10:35 +0000 (17:10 -0500)
committerDavid Teigland <teigland@redhat.com>
Mon, 23 Jan 2023 19:59:26 +0000 (13:59 -0600)
Similar to the stop tx flag, the rx flag should warn about a dlm message
being received at DLM_FIN state change, when we are assuming no other
dlm application messages. If we receive a FIN message and we are in the
state DLM_FIN_WAIT2 we call midcomms_node_reset() which puts the
midcomms node into DLM_CLOSED state. Afterwards we should not set the
DLM_NODE_FLAG_STOP_RX flag any more.  This patch changes the setting
DLM_NODE_FLAG_STOP_RX in those state changes when we receive a FIN
message and we assume there will be no other dlm application messages
received until we hit DLM_CLOSED state.

Cc: stable@vger.kernel.org
Fixes: 489d8e559c65 ("fs: dlm: add reliable connection if reconnect")
Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/midcomms.c

index 9d459d5bf8002752908a3e7658f913f957094de8..1fef99214204038be2d89feda4f09134bfd62f86 100644 (file)
@@ -524,6 +524,7 @@ static void dlm_midcomms_receive_buffer(union dlm_packet *p,
                                break;
                        case DLM_FIN_WAIT1:
                                node->state = DLM_CLOSING;
+                               set_bit(DLM_NODE_FLAG_STOP_RX, &node->flags);
                                pr_debug("switch node %d to state %s\n",
                                         node->nodeid, dlm_state_str(node->state));
                                break;
@@ -544,8 +545,6 @@ static void dlm_midcomms_receive_buffer(union dlm_packet *p,
                                return;
                        }
                        spin_unlock(&node->state_lock);
-
-                       set_bit(DLM_NODE_FLAG_STOP_RX, &node->flags);
                        break;
                default:
                        WARN_ON_ONCE(test_bit(DLM_NODE_FLAG_STOP_RX, &node->flags));