net/smc: cancel send and receive for terminated socket
The resources for a terminated socket are being cleaned up. This patch makes sure * no more data is received for an actively terminated socket * no more data is sent for an actively or passively terminated socket Signed-off-by: Ursula Braun <ubraun@linux.ibm.com> Signed-off-by: Karsten Graul <kgraul@linux.ibm.com> Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
This commit is contained in:

committed by
Jakub Kicinski

parent
fe28afe23e
commit
b290098092
@@ -66,7 +66,8 @@ static void smc_close_stream_wait(struct smc_sock *smc, long timeout)
|
||||
rc = sk_wait_event(sk, &timeout,
|
||||
!smc_tx_prepared_sends(&smc->conn) ||
|
||||
sk->sk_err == ECONNABORTED ||
|
||||
sk->sk_err == ECONNRESET,
|
||||
sk->sk_err == ECONNRESET ||
|
||||
smc->conn.killed,
|
||||
&wait);
|
||||
if (rc)
|
||||
break;
|
||||
@@ -95,6 +96,8 @@ static int smc_close_final(struct smc_connection *conn)
|
||||
conn->local_tx_ctrl.conn_state_flags.peer_conn_abort = 1;
|
||||
else
|
||||
conn->local_tx_ctrl.conn_state_flags.peer_conn_closed = 1;
|
||||
if (conn->killed)
|
||||
return -EPIPE;
|
||||
|
||||
return smc_cdc_get_slot_and_msg_send(conn);
|
||||
}
|
||||
@@ -326,7 +329,7 @@ static void smc_close_passive_work(struct work_struct *work)
|
||||
lock_sock(sk);
|
||||
old_state = sk->sk_state;
|
||||
|
||||
if (!conn->alert_token_local) {
|
||||
if (conn->killed) {
|
||||
/* abnormal termination */
|
||||
smc_close_active_abort(smc);
|
||||
goto wakeup;
|
||||
|
Reference in New Issue
Block a user