Message ID | 20211125132431.23264-1-tonylu@linux.alibaba.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net,v2] net/smc: Don't call clcsock shutdown twice when smc shutdown | expand |
On 25/11/2021 14:24, Tony Lu wrote: > @@ -2398,7 +2400,12 @@ static int smc_shutdown(struct socket *sock, int how) > } > switch (how) { > case SHUT_RDWR: /* shutdown in both directions */ > + old_state = sk->sk_state; > rc = smc_close_active(smc); > + if (old_state == SMC_ACTIVE && > + sk->sk_state == SMC_PEERCLOSEWAIT1) > + do_shutdown = false; > + > break; Please send a v3 without the extra empty line before the break statement, and then the patch is fine with me. Thank you!
On Thu, Nov 25, 2021 at 03:51:06PM +0100, Karsten Graul wrote: > On 25/11/2021 14:24, Tony Lu wrote: > > @@ -2398,7 +2400,12 @@ static int smc_shutdown(struct socket *sock, int how) > > } > > switch (how) { > > case SHUT_RDWR: /* shutdown in both directions */ > > + old_state = sk->sk_state; > > rc = smc_close_active(smc); > > + if (old_state == SMC_ACTIVE && > > + sk->sk_state == SMC_PEERCLOSEWAIT1) > > + do_shutdown = false; > > + > > break; > > Please send a v3 without the extra empty line before the break statement, > and then the patch is fine with me. > > Thank you! I will fix it, and send it out soon. Thanks, Tony Lu
diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c index 4b62c925a13e..9fd350fa22ba 100644 --- a/net/smc/af_smc.c +++ b/net/smc/af_smc.c @@ -2370,8 +2370,10 @@ static __poll_t smc_poll(struct file *file, struct socket *sock, static int smc_shutdown(struct socket *sock, int how) { struct sock *sk = sock->sk; + bool do_shutdown = true; struct smc_sock *smc; int rc = -EINVAL; + int old_state; int rc1 = 0; smc = smc_sk(sk); @@ -2398,7 +2400,12 @@ static int smc_shutdown(struct socket *sock, int how) } switch (how) { case SHUT_RDWR: /* shutdown in both directions */ + old_state = sk->sk_state; rc = smc_close_active(smc); + if (old_state == SMC_ACTIVE && + sk->sk_state == SMC_PEERCLOSEWAIT1) + do_shutdown = false; + break; case SHUT_WR: rc = smc_close_shutdown_write(smc); @@ -2408,7 +2415,7 @@ static int smc_shutdown(struct socket *sock, int how) /* nothing more to do because peer is not involved */ break; } - if (smc->clcsock) + if (do_shutdown && smc->clcsock) rc1 = kernel_sock_shutdown(smc->clcsock, how); /* map sock_shutdown_cmd constants to sk_shutdown value range */ sk->sk_shutdown |= how + 1;