fs: dlm: wait until all midcomms nodes detect version
authorAlexander Aring <aahringo@redhat.com>
Thu, 12 Jan 2023 22:18:44 +0000 (17:18 -0500)
committerDavid Teigland <teigland@redhat.com>
Mon, 23 Jan 2023 20:58:19 +0000 (14:58 -0600)
commitb8b750e0c99f39223115f2672ac4cfa96ecb9edd
tree9235b9b2cfd13f442b74cf8e5afcc4c8118d66bb
parent89835b064fe7421a60e40770c27d38024190a0c8
fs: dlm: wait until all midcomms nodes detect version

The current dlm version detection is very complex due to backwards
compatablilty with earlier dlm protocol versions. It takes some time to
detect if a peer node has a specific DLM version. If it's not detected,
we just cut the socket connection. There could be cases where the local
node has not detected the version yet, but the peer node has.  In these
cases, we are trying to shutdown the dlm connection with a FIN/ACK message
exchange to be sure the other peer is ready to shutdown the connection on
dlm application level.  However this mechanism is only available on DLM
protocol version 3.2 and we need to be sure the DLM version is detected
before.

To make it more robust we introduce a a "best effort" wait to wait for the
version detection before shutdown the dlm connection. This need to be
done before the kthread recoverd for recovery handling is stopped,
because recovery handling will trigger enough messages to have a version
detection going on.

It is a corner case which was detected by modprobe dlm_locktroture module
and rmmod dlm_locktorture module directly afterwards (in a looping
behaviour). In practice probably nobody would leave a lockspace immediately
after joining it.

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