diff options
Diffstat (limited to 'net/smc/smc_cdc.c')
| -rw-r--r-- | net/smc/smc_cdc.c | 7 | 
1 files changed, 5 insertions, 2 deletions
diff --git a/net/smc/smc_cdc.c b/net/smc/smc_cdc.c index d0b0f4c865b4..164f1584861b 100644 --- a/net/smc/smc_cdc.c +++ b/net/smc/smc_cdc.c @@ -63,7 +63,7 @@ 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->alert_token_local) +	if (conn->killed)  		/* abnormal termination */  		rc = -EPIPE;  	return rc; @@ -131,6 +131,9 @@ int smc_cdc_get_slot_and_msg_send(struct smc_connection *conn)  {  	int rc; +	if (!conn->lgr || (conn->lgr->is_smcd && conn->lgr->peer_shutdown)) +		return -EPIPE; +  	if (conn->lgr->is_smcd) {  		spin_lock_bh(&conn->send_lock);  		rc = smcd_cdc_msg_send(conn); @@ -328,7 +331,7 @@ static void smcd_cdc_rx_tsklet(unsigned long data)  	struct smcd_cdc_msg cdc;  	struct smc_sock *smc; -	if (!conn) +	if (!conn || conn->killed)  		return;  	data_cdc = (struct smcd_cdc_msg *)conn->rmb_desc->cpu_addr;  |