net/smc: guarantee removal of link groups in reboot
authorUrsula Braun <ubraun@linux.ibm.com>
Sat, 16 Nov 2019 16:47:30 +0000 (17:47 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sat, 16 Nov 2019 20:26:49 +0000 (12:26 -0800)
When rebooting it should be guaranteed all link groups are cleaned
up and freed.

Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_core.c

index cf34b9d96595547f6f45e7f88d31026f7b7b1a56..bb92c7c6214c30d32dfaa38f3e97ae743c384d2c 100644 (file)
@@ -14,6 +14,7 @@
 #include <linux/random.h>
 #include <linux/workqueue.h>
 #include <linux/wait.h>
+#include <linux/reboot.h>
 #include <net/tcp.h>
 #include <net/sock.h>
 #include <rdma/ib_verbs.h>
@@ -1282,14 +1283,27 @@ static void smc_lgrs_shutdown(void)
        spin_unlock(&smcd_dev_list.lock);
 }
 
+static int smc_core_reboot_event(struct notifier_block *this,
+                                unsigned long event, void *ptr)
+{
+       smc_lgrs_shutdown();
+
+       return 0;
+}
+
+static struct notifier_block smc_reboot_notifier = {
+       .notifier_call = smc_core_reboot_event,
+};
+
 int __init smc_core_init(void)
 {
        atomic_set(&lgr_cnt, 0);
-       return 0;
+       return register_reboot_notifier(&smc_reboot_notifier);
 }
 
 /* Called (from smc_exit) when module is removed */
 void smc_core_exit(void)
 {
+       unregister_reboot_notifier(&smc_reboot_notifier);
        smc_lgrs_shutdown();
 }