fs: dlm: fix race setting stop tx flag
authorAlexander Aring <aahringo@redhat.com>
Thu, 12 Jan 2023 22:10:34 +0000 (17:10 -0500)
committerDavid Teigland <teigland@redhat.com>
Mon, 23 Jan 2023 19:05:46 +0000 (13:05 -0600)
This patch sets the stop tx flag before we commit the dlm message.
This flag will report about unexpected transmissions after we
send the DLM_FIN message out, which should be the last message sent.
When we commit the dlm fin message, it could be that we already
got an ack back and the CLOSED state change already happened.
We should not set this flag when we are in CLOSED state. To avoid this
race we simply set the tx flag before the state change can be in
progress by moving it before dlm_midcomms_commit_mhandle().

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 a3eb19c8cec53abd5ec291d300ad8ef10f8f07a7..9d459d5bf8002752908a3e7658f913f957094de8 100644 (file)
@@ -406,6 +406,7 @@ static int dlm_send_fin(struct midcomms_node *node,
        if (!mh)
                return -ENOMEM;
 
+       set_bit(DLM_NODE_FLAG_STOP_TX, &node->flags);
        mh->ack_rcv = ack_rcv;
 
        m_header = (struct dlm_header *)ppc;
@@ -417,7 +418,6 @@ static int dlm_send_fin(struct midcomms_node *node,
 
        pr_debug("sending fin msg to node %d\n", node->nodeid);
        dlm_midcomms_commit_mhandle(mh, NULL, 0);
-       set_bit(DLM_NODE_FLAG_STOP_TX, &node->flags);
 
        return 0;
 }