net/smc: clear link during SMC client link down processing
authorKarsten Graul <kgraul@linux.ibm.com>
Sat, 18 Jul 2020 13:06:10 +0000 (15:06 +0200)
committerDavid S. Miller <davem@davemloft.net>
Sun, 19 Jul 2020 22:30:22 +0000 (15:30 -0700)
In a link-down condition we notify the SMC server and expect that the
server will finally trigger the link clear processing on the client
side. This could fail when anything along this notification path goes
wrong. Clear the link as part of SMC client link-down processing to
prevent dangling links.

Reviewed-by: Ursula Braun <ubraun@linux.ibm.com>
Fixes: 541afa10c126 ("net/smc: add smcr_port_err() and smcr_link_down() processing")
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/smc_core.c

index f69d205b3e11e51f7f89e5bdcdd0174cc699124e..e286b3c8c9629f2f89cbaa59ef71d3cc4ec15c8e 100644 (file)
@@ -1204,10 +1204,12 @@ static void smcr_link_down(struct smc_link *lnk)
                                SMC_LLC_WAIT_TIME);
                        mutex_lock(&lgr->llc_conf_mutex);
                }
-               if (!list_empty(&lgr->list))
+               if (!list_empty(&lgr->list)) {
                        smc_llc_send_delete_link(to_lnk, del_link_id,
                                                 SMC_LLC_REQ, true,
                                                 SMC_LLC_DEL_LOST_PATH);
+                       smcr_link_clear(lnk, true);
+               }
                wake_up(&lgr->llc_flow_waiter); /* wake up next waiter */
        }
 }