diff options
author | Karsten Graul <kgraul@linux.ibm.com> | 2020-05-04 14:18:45 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-05-04 10:54:39 -0700 |
commit | 3e0c40afce4ea5b08bb7e3f65c55157817116640 (patch) | |
tree | aef0d3695b0a2ea18b3603aed2e5b92ecc7671fb /net/smc/smc_core.c | |
parent | ad6c111b8ae760114df6765d5a5ed1b09020d45d (diff) |
net/smc: add termination reason and handle LLC protocol violation
Allow to set the reason code for the link group termination, and set
meaningful values before termination processing is triggered. This
reason code is sent to the peer in the final delete link message.
When the LLC request or response layer receives a message type that was
not handled, drop a warning and terminate the link group.
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Reviewed-by: Ursula Braun <ubraun@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/smc/smc_core.c')
-rw-r--r-- | net/smc/smc_core.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/net/smc/smc_core.c b/net/smc/smc_core.c index be15b30a1234..b6f93b44f9c7 100644 --- a/net/smc/smc_core.c +++ b/net/smc/smc_core.c @@ -878,8 +878,11 @@ static void smc_lgr_cleanup(struct smc_link_group *lgr) smc_ism_put_vlan(lgr->smcd, lgr->vlan_id); put_device(&lgr->smcd->dev); } else { - smc_llc_send_link_delete_all(lgr, false, - SMC_LLC_DEL_OP_INIT_TERM); + u32 rsn = lgr->llc_termination_rsn; + + if (!rsn) + rsn = SMC_LLC_DEL_PROG_INIT_TERM; + smc_llc_send_link_delete_all(lgr, false, rsn); for (i = 0; i < SMC_LINKS_PER_LGR_MAX; i++) { struct smc_link *lnk = &lgr->lnk[i]; @@ -1018,6 +1021,7 @@ void smc_smcr_terminate_all(struct smc_ib_device *smcibdev) list_for_each_entry_safe(lgr, lg, &lgr_free_list, list) { list_del_init(&lgr->list); + smc_llc_set_termination_rsn(lgr, SMC_LLC_DEL_OP_INIT_TERM); __smc_lgr_terminate(lgr, false); } |