Commit 2bced6ae authored by Karsten Graul's avatar Karsten Graul Committed by David S. Miller
Browse files

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: b2900980 ("net/smc: cancel send and receive for terminated socket")
Reviewed-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 639f181f
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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;
}