summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/inet/tcp/tcp_fusion.c
diff options
context:
space:
mode:
authorThirumalai Srinivasan <Thirumalai.Srinivasan@Sun.COM>2009-02-12 12:04:04 -0800
committerThirumalai Srinivasan <Thirumalai.Srinivasan@Sun.COM>2009-02-12 12:04:04 -0800
commit43c1282c853276ba614c8b03a92b22b965cfb41f (patch)
tree3aae532af99dc1b0fb1f9453a5710b16c237b74a /usr/src/uts/common/inet/tcp/tcp_fusion.c
parentd753835af57c7904d74f55a1251a643a5ddc47d1 (diff)
downloadillumos-joyent-43c1282c853276ba614c8b03a92b22b965cfb41f.tar.gz
6791375 assertion failed: tcp->tcp_xmit_tail_unsent == 0
Diffstat (limited to 'usr/src/uts/common/inet/tcp/tcp_fusion.c')
-rw-r--r--usr/src/uts/common/inet/tcp/tcp_fusion.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/usr/src/uts/common/inet/tcp/tcp_fusion.c b/usr/src/uts/common/inet/tcp/tcp_fusion.c
index 1c69ced8a1..a8b6780cef 100644
--- a/usr/src/uts/common/inet/tcp/tcp_fusion.c
+++ b/usr/src/uts/common/inet/tcp/tcp_fusion.c
@@ -251,7 +251,9 @@ tcp_fuse(tcp_t *tcp, uchar_t *iphdr, tcph_t *tcph)
* Fuse the endpoints; we perform further checks against both
* tcp endpoints to ensure that a fusion is allowed to happen.
* In particular we bail out for non-simple TCP/IP or if IPsec/
- * IPQoS policy/kernel SSL exists.
+ * IPQoS policy/kernel SSL exists. We also need to check if
+ * the connection is quiescent to cover the case when we are
+ * trying to re-enable fusion after IPobservability is turned off.
*/
ns = tcps->tcps_netstack;
ipst = ns->netstack_ip;
@@ -260,6 +262,7 @@ tcp_fuse(tcp_t *tcp, uchar_t *iphdr, tcph_t *tcph)
!tcp_loopback_needs_ip(tcp, ns) &&
!tcp_loopback_needs_ip(peer_tcp, ns) &&
tcp->tcp_kssl_ent == NULL &&
+ tcp->tcp_xmit_head == NULL && peer_tcp->tcp_xmit_head == NULL &&
!IPP_ENABLED(IPP_LOCAL_OUT|IPP_LOCAL_IN, ipst)) {
mblk_t *mp;
queue_t *peer_rq = peer_tcp->tcp_rq;