Similar like the stop tx flag the rx flag should warn about dlm message
being received at DLM_FIN state change and we are not assuming any other
application DLM messages anymore. 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 the
DLM_NODE_FLAG_STOP_RX flag what we are currently doing. This patch
handles to set the DLM_NODE_FLAG_STOP_RX flag only in those cases if we
receive a FIN message and we don't assume other dlm application messages
to be received anymore.

Cc: [email protected]
Fixes: 489d8e559c65 ("fs: dlm: add reliable connection if reconnect")
Signed-off-by: Alexander Aring <[email protected]>
---
 fs/dlm/midcomms.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/fs/dlm/midcomms.c b/fs/dlm/midcomms.c
index 9d459d5bf800..1fef99214204 100644
--- a/fs/dlm/midcomms.c
+++ b/fs/dlm/midcomms.c
@@ -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));
-- 
2.31.1

Reply via email to