Skip to content

Commit 288c839

Browse files
Ursula Braundavem330
authored andcommitted
net/smc: destruct non-accepted sockets
Make sure sockets never accepted are removed cleanly. Signed-off-by: Ursula Braun <[email protected]> Reviewed-by: Thomas Richter <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent f5227cd commit 288c839

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

net/smc/af_smc.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -638,7 +638,8 @@ struct sock *smc_accept_dequeue(struct sock *parent,
638638

639639
smc_accept_unlink(new_sk);
640640
if (new_sk->sk_state == SMC_CLOSED) {
641-
/* tbd in follow-on patch: close this sock */
641+
new_sk->sk_prot->unhash(new_sk);
642+
sock_put(new_sk);
642643
continue;
643644
}
644645
if (new_sock)
@@ -658,20 +659,23 @@ void smc_close_non_accepted(struct sock *sk)
658659
if (!sk->sk_lingertime)
659660
/* wait for peer closing */
660661
sk->sk_lingertime = SMC_MAX_STREAM_WAIT_TIMEOUT;
661-
if (!smc->use_fallback)
662+
if (smc->use_fallback) {
663+
sk->sk_state = SMC_CLOSED;
664+
} else {
662665
smc_close_active(smc);
666+
sock_set_flag(sk, SOCK_DEAD);
667+
sk->sk_shutdown |= SHUTDOWN_MASK;
668+
}
663669
if (smc->clcsock) {
664670
struct socket *tcp;
665671

666672
tcp = smc->clcsock;
667673
smc->clcsock = NULL;
668674
sock_release(tcp);
669675
}
670-
sock_set_flag(sk, SOCK_DEAD);
671-
sk->sk_shutdown |= SHUTDOWN_MASK;
672676
if (smc->use_fallback) {
673677
schedule_delayed_work(&smc->sock_put_work, TCP_TIMEWAIT_LEN);
674-
} else {
678+
} else if (sk->sk_state == SMC_CLOSED) {
675679
smc_conn_free(&smc->conn);
676680
schedule_delayed_work(&smc->sock_put_work,
677681
SMC_CLOSE_SOCK_PUT_DELAY);

net/smc/smc_close.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ int smc_close_active(struct smc_sock *smc)
191191
sk->sk_state = SMC_CLOSED;
192192
if (smc->smc_listen_work.func)
193193
cancel_work_sync(&smc->smc_listen_work);
194-
sock_put(sk);
195194
break;
196195
case SMC_LISTEN:
197196
sk->sk_state = SMC_CLOSED;

0 commit comments

Comments
 (0)