fs: dlm: add midcomms init/start functions
authorAlexander Aring <aahringo@redhat.com>
Thu, 17 Nov 2022 22:11:46 +0000 (17:11 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Mar 2023 07:48:49 +0000 (08:48 +0100)
[ Upstream commit 8b0188b0d60b6f6183b48380bac49fe080c5ded9 ]

This patch introduces leftovers of init, start, stop and exit
functionality. The dlm application layer should always call the midcomms
layer which getting aware of such event and redirect it to the lowcomms
layer. Some functionality which is currently handled inside the start
functionality of midcomms and lowcomms should be handled in the init
functionality as it only need to be initialized once when dlm is loaded.

Signed-off-by: Alexander Aring <aahringo@redhat.com>
Signed-off-by: David Teigland <teigland@redhat.com>
Stable-dep-of: aad633dc0cf9 ("fs: dlm: start midcomms before scand")
Signed-off-by: Sasha Levin <sashal@kernel.org>
fs/dlm/lockspace.c
fs/dlm/lowcomms.c
fs/dlm/lowcomms.h
fs/dlm/main.c
fs/dlm/midcomms.c
fs/dlm/midcomms.h

index a1b34605742fc971572357e802a83826b1226d2e..1b49f375829d0a5d4aad438b002e4a8ffb26352c 100644 (file)
@@ -17,7 +17,6 @@
 #include "recoverd.h"
 #include "dir.h"
 #include "midcomms.h"
-#include "lowcomms.h"
 #include "config.h"
 #include "memory.h"
 #include "lock.h"
@@ -705,7 +704,7 @@ int dlm_new_lockspace(const char *name, const char *cluster,
        if (!ls_count) {
                dlm_scand_stop();
                dlm_midcomms_shutdown();
-               dlm_lowcomms_stop();
+               dlm_midcomms_stop();
        }
  out:
        mutex_unlock(&ls_lock);
@@ -889,7 +888,7 @@ int dlm_release_lockspace(void *lockspace, int force)
        if (!error)
                ls_count--;
        if (!ls_count)
-               dlm_lowcomms_stop();
+               dlm_midcomms_stop();
        mutex_unlock(&ls_lock);
 
        return error;
index d56a8f88a3852d0974a038e77192c7f3c40be17d..1eb95ba7e7772407fde484ac79f11fed785e6f47 100644 (file)
@@ -1959,10 +1959,6 @@ static const struct dlm_proto_ops dlm_sctp_ops = {
 int dlm_lowcomms_start(void)
 {
        int error = -EINVAL;
-       int i;
-
-       for (i = 0; i < CONN_HASH_SIZE; i++)
-               INIT_HLIST_HEAD(&connection_hash[i]);
 
        init_local();
        if (!dlm_local_count) {
@@ -1971,8 +1967,6 @@ int dlm_lowcomms_start(void)
                goto fail;
        }
 
-       INIT_WORK(&listen_con.rwork, process_listen_recv_socket);
-
        error = work_start();
        if (error)
                goto fail_local;
@@ -2011,6 +2005,16 @@ fail:
        return error;
 }
 
+void dlm_lowcomms_init(void)
+{
+       int i;
+
+       for (i = 0; i < CONN_HASH_SIZE; i++)
+               INIT_HLIST_HEAD(&connection_hash[i]);
+
+       INIT_WORK(&listen_con.rwork, process_listen_recv_socket);
+}
+
 void dlm_lowcomms_exit(void)
 {
        struct dlm_node_addr *na, *safe;
index 4ccae07cf0058306b5aea7f63b4c6dfbd64258c6..26433632d17176368c1cf8750d887650dd31907e 100644 (file)
@@ -35,6 +35,7 @@ extern int dlm_allow_conn;
 int dlm_lowcomms_start(void);
 void dlm_lowcomms_shutdown(void);
 void dlm_lowcomms_stop(void);
+void dlm_lowcomms_init(void);
 void dlm_lowcomms_exit(void);
 int dlm_lowcomms_close(int nodeid);
 struct dlm_msg *dlm_lowcomms_new_msg(int nodeid, int len, gfp_t allocation,
index afc66a1346d3d1622b973d9dc88caac55df7683e..974f7ebb3fe63f193ae9f953126d7f466d4bd44e 100644 (file)
@@ -17,7 +17,7 @@
 #include "user.h"
 #include "memory.h"
 #include "config.h"
-#include "lowcomms.h"
+#include "midcomms.h"
 
 static int __init init_dlm(void)
 {
@@ -27,6 +27,8 @@ static int __init init_dlm(void)
        if (error)
                goto out;
 
+       dlm_midcomms_init();
+
        error = dlm_lockspace_init();
        if (error)
                goto out_mem;
@@ -63,6 +65,7 @@ static int __init init_dlm(void)
  out_lockspace:
        dlm_lockspace_exit();
  out_mem:
+       dlm_midcomms_exit();
        dlm_memory_exit();
  out:
        return error;
@@ -76,7 +79,7 @@ static void __exit exit_dlm(void)
        dlm_config_exit();
        dlm_memory_exit();
        dlm_lockspace_exit();
-       dlm_lowcomms_exit();
+       dlm_midcomms_exit();
        dlm_unregister_debugfs();
 }
 
index 702c14de7a4bdb24b227b09a03abf37d8a760eaf..84a7a39fc12e65038077b17b9f1ba66e6d274630 100644 (file)
@@ -1142,13 +1142,28 @@ void dlm_midcomms_commit_mhandle(struct dlm_mhandle *mh)
 }
 
 int dlm_midcomms_start(void)
+{
+       return dlm_lowcomms_start();
+}
+
+void dlm_midcomms_stop(void)
+{
+       dlm_lowcomms_stop();
+}
+
+void dlm_midcomms_init(void)
 {
        int i;
 
        for (i = 0; i < CONN_HASH_SIZE; i++)
                INIT_HLIST_HEAD(&node_hash[i]);
 
-       return dlm_lowcomms_start();
+       dlm_lowcomms_init();
+}
+
+void dlm_midcomms_exit(void)
+{
+       dlm_lowcomms_exit();
 }
 
 static void dlm_act_fin_ack_rcv(struct midcomms_node *node)
index 579abc6929be28fbf36ede8bb51bf9fb7145bd5a..1a36b7834dfc5b68f3fb2611f4aeb2a503c93931 100644 (file)
@@ -20,6 +20,9 @@ struct dlm_mhandle *dlm_midcomms_get_mhandle(int nodeid, int len,
 void dlm_midcomms_commit_mhandle(struct dlm_mhandle *mh);
 int dlm_midcomms_close(int nodeid);
 int dlm_midcomms_start(void);
+void dlm_midcomms_stop(void);
+void dlm_midcomms_init(void);
+void dlm_midcomms_exit(void);
 void dlm_midcomms_shutdown(void);
 void dlm_midcomms_add_member(int nodeid);
 void dlm_midcomms_remove_member(int nodeid);