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>
This commit is contained in:
Ursula Braun 2019-11-16 17:47:30 +01:00 committed by David S. Miller
parent 6dabd40545
commit a33a803cfe
1 changed files with 15 additions and 1 deletions

View File

@ -14,6 +14,7 @@
#include <linux/random.h> #include <linux/random.h>
#include <linux/workqueue.h> #include <linux/workqueue.h>
#include <linux/wait.h> #include <linux/wait.h>
#include <linux/reboot.h>
#include <net/tcp.h> #include <net/tcp.h>
#include <net/sock.h> #include <net/sock.h>
#include <rdma/ib_verbs.h> #include <rdma/ib_verbs.h>
@ -1282,14 +1283,27 @@ static void smc_lgrs_shutdown(void)
spin_unlock(&smcd_dev_list.lock); 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) int __init smc_core_init(void)
{ {
atomic_set(&lgr_cnt, 0); atomic_set(&lgr_cnt, 0);
return 0; return register_reboot_notifier(&smc_reboot_notifier);
} }
/* Called (from smc_exit) when module is removed */ /* Called (from smc_exit) when module is removed */
void smc_core_exit(void) void smc_core_exit(void)
{ {
unregister_reboot_notifier(&smc_reboot_notifier);
smc_lgrs_shutdown(); smc_lgrs_shutdown();
} }