net/smc: Terminate connections prior to device removal
authorStefan Raspl <raspl@linux.ibm.com>
Mon, 23 Jan 2023 18:17:45 +0000 (19:17 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 25 Jan 2023 09:46:48 +0000 (09:46 +0000)
Removing an ISM device prior to terminating its associated connections
doesn't end well.

Signed-off-by: Stefan Raspl <raspl@linux.ibm.com>
Signed-off-by: Jan Karcher <jaka@linux.ibm.com>
Signed-off-by: Wenjia Zhang <wenjia@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_ism.c

index 911fe08..28e1641 100644 (file)
@@ -462,11 +462,11 @@ void smcd_unregister_dev(struct smcd_dev *smcd)
 {
        pr_warn_ratelimited("smc: removing smcd device %s\n",
                            dev_name(&smcd->dev));
+       smcd->going_away = 1;
+       smc_smcd_terminate_all(smcd);
        mutex_lock(&smcd_dev_list.mutex);
        list_del_init(&smcd->list);
        mutex_unlock(&smcd_dev_list.mutex);
-       smcd->going_away = 1;
-       smc_smcd_terminate_all(smcd);
        destroy_workqueue(smcd->event_wq);
 
        device_del(&smcd->dev);