summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp_fusion.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_fusion.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp_fusion.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp_fusion.c b/usr/src/uts/common/inet/tcp/tcp_fusion.c
index 2503a13e29..75851ac1f7 100644
--- a/usr/src/uts/common/inet/tcp/tcp_fusion.c
+++ b/usr/src/uts/common/inet/tcp/tcp_fusion.c
@@ -287,6 +287,15 @@ tcp_fuse(tcp_t *tcp, uchar_t *iphdr, tcph_t *tcph)
if ((mp = allocb(sizeof (*stropt), BPRI_HI)) == NULL)
goto failed;
+ /* If peer sodirect enabled then disable */
+ ASSERT(tcp->tcp_sodirect == NULL);
+ if (peer_tcp->tcp_sodirect != NULL) {
+ mutex_enter(peer_tcp->tcp_sodirect->sod_lock);
+ SOD_DISABLE(peer_tcp->tcp_sodirect);
+ mutex_exit(peer_tcp->tcp_sodirect->sod_lock);
+ peer_tcp->tcp_sodirect = NULL;
+ }
+
/* Fuse both endpoints */
peer_tcp->tcp_loopback_peer = tcp;
tcp->tcp_loopback_peer = peer_tcp;