summaryrefslogtreecommitdiff
path: root/net/smc
diff options
context:
space:
mode:
authorUrsula Braun <ubraun@linux.ibm.com>2019-11-16 17:47:30 +0100
committerDavid S. Miller <davem@davemloft.net>2019-11-16 12:26:49 -0800
commita33a803cfe64309d330540ae4a8df17158bcb6ea (patch)
treea718141e14756f70734a5dcb5941f0d3c052785a /net/smc
parent6dabd405451f35c905dfadb6a06f5c981074fc14 (diff)
downloadlwn-a33a803cfe64309d330540ae4a8df17158bcb6ea.tar.gz
lwn-a33a803cfe64309d330540ae4a8df17158bcb6ea.zip
net/smc: guarantee removal of link groups in reboot
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>
Diffstat (limited to 'net/smc')
-rw-r--r--net/smc/smc_core.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c
index cf34b9d96595..bb92c7c6214c 100644
--- a/net/smc/smc_core.c
+++ b/net/smc/smc_core.c
@@ -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();
}