net/smc: switch connections to alternate link
Add smc_switch_conns() to switch all connections from a link that is going down. Find an other link to switch the connections to, and switch each connection to the new link. smc_switch_cursor() updates the cursors of a connection to the state of the last successfully sent CDC message. When there is no link to switch to, terminate the link group. Call smc_switch_conns() when a link is going down. And with the possibility that links of connections can switch adapt CDC and TX functions to detect and handle link switches. 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>
Este cometimento está contido em:

cometido por
David S. Miller

ascendente
f0ec4f1d32
cometimento
c6f02ebeea
@@ -933,7 +933,7 @@ static void smc_llc_delete_asym_link(struct smc_link_group *lgr)
|
||||
return; /* no asymmetric link */
|
||||
if (!smc_link_downing(&lnk_asym->state))
|
||||
return;
|
||||
/* tbd: lnk_new = smc_switch_conns(lgr, lnk_asym, false); */
|
||||
lnk_new = smc_switch_conns(lgr, lnk_asym, false);
|
||||
smc_wr_tx_wait_no_pending_sends(lnk_asym);
|
||||
if (!lnk_new)
|
||||
goto out_free;
|
||||
@@ -1195,7 +1195,7 @@ static void smc_llc_process_cli_delete_link(struct smc_link_group *lgr)
|
||||
smc_llc_send_message(lnk, &qentry->msg); /* response */
|
||||
|
||||
if (smc_link_downing(&lnk_del->state)) {
|
||||
/* tbd: call smc_switch_conns(lgr, lnk_del, false); */
|
||||
smc_switch_conns(lgr, lnk_del, false);
|
||||
smc_wr_tx_wait_no_pending_sends(lnk_del);
|
||||
}
|
||||
smcr_link_clear(lnk_del);
|
||||
@@ -1245,7 +1245,7 @@ static void smc_llc_process_srv_delete_link(struct smc_link_group *lgr)
|
||||
goto out; /* asymmetric link already deleted */
|
||||
|
||||
if (smc_link_downing(&lnk_del->state)) {
|
||||
/* tbd: call smc_switch_conns(lgr, lnk_del, false); */
|
||||
smc_switch_conns(lgr, lnk_del, false);
|
||||
smc_wr_tx_wait_no_pending_sends(lnk_del);
|
||||
}
|
||||
if (!list_empty(&lgr->list)) {
|
||||
|
Criar uma nova questão referindo esta
Bloquear um utilizador