net/smc: put slot when connection is killed
To get a send slot smc_wr_tx_get_free_slot() is called, which might
wait for a free slot. When smc_wr_tx_get_free_slot() returns there is a
check if the connection was killed in the meantime. In that case don't
only return an error, but also put back the free slot.
Fixes: b290098092
("net/smc: cancel send and receive for terminated socket")
Reviewed-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:
parent
639f181f0e
commit
2bced6aefa
|
@ -66,9 +66,13 @@ int smc_cdc_get_free_slot(struct smc_connection *conn,
|
|||
rc = smc_wr_tx_get_free_slot(link, smc_cdc_tx_handler, wr_buf,
|
||||
wr_rdma_buf,
|
||||
(struct smc_wr_tx_pend_priv **)pend);
|
||||
if (conn->killed)
|
||||
if (conn->killed) {
|
||||
/* abnormal termination */
|
||||
if (!rc)
|
||||
smc_wr_tx_put_slot(link,
|
||||
(struct smc_wr_tx_pend_priv *)pend);
|
||||
rc = -EPIPE;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user