]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - net/smc/smc_close.c
hwmon: (occ) Remove sequence numbering and checksum calculation
[mirror_ubuntu-jammy-kernel.git] / net / smc / smc_close.c
index 0f9ffba07d26858cfd07c53567e14700884553d4..84102db5bb31452ed1e8aec94514418e4741d464 100644 (file)
@@ -195,6 +195,7 @@ int smc_close_active(struct smc_sock *smc)
        int old_state;
        long timeout;
        int rc = 0;
+       int rc1 = 0;
 
        timeout = current->flags & PF_EXITING ?
                  0 : sock_flag(sk, SOCK_LINGER) ?
@@ -228,6 +229,15 @@ again:
                        /* send close request */
                        rc = smc_close_final(conn);
                        sk->sk_state = SMC_PEERCLOSEWAIT1;
+
+                       /* actively shutdown clcsock before peer close it,
+                        * prevent peer from entering TIME_WAIT state.
+                        */
+                       if (smc->clcsock && smc->clcsock->sk) {
+                               rc1 = kernel_sock_shutdown(smc->clcsock,
+                                                          SHUT_RDWR);
+                               rc = rc ? rc : rc1;
+                       }
                } else {
                        /* peer event has changed the state */
                        goto again;