On 25/11/2021 07:19, Tony Lu wrote: > diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c > index 4b62c925a13e..7b04cb4d15f4 100644 > --- a/net/smc/af_smc.c > +++ b/net/smc/af_smc.c > @@ -2373,6 +2373,7 @@ static int smc_shutdown(struct socket *sock, int how) > struct smc_sock *smc; > int rc = -EINVAL; > int rc1 = 0; > + int old_state; Reverse Christmas tree formatting, please. > > smc = smc_sk(sk); > > @@ -2398,7 +2399,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) > + goto out_no_shutdown; > + I would prefer a new "bool do_shutdown" instead of a goto for this skip of the shutdown. What do you think? > break; > case SHUT_WR: > rc = smc_close_shutdown_write(smc); > @@ -2410,6 +2416,8 @@ static int smc_shutdown(struct socket *sock, int how) > } > if (smc->clcsock) > rc1 = kernel_sock_shutdown(smc->clcsock, how); > + > +out_no_shutdown: > /* map sock_shutdown_cmd constants to sk_shutdown value range */ > sk->sk_shutdown |= how + 1; > > -- Karsten