# HG changeset patch # User rshoaib # Date 1171993566 28800 # Node ID 39e9a07d770e3ca3f429e363378f57e6d554e0d3 # Parent 48f0fd311ddb4526a4ea6832840e37130079b922 6522934 When tcp fuse is on, taking a logical network interface down doesn't freeze connections diff -r 48f0fd311ddb -r 39e9a07d770e usr/src/uts/common/inet/tcp/tcp_fusion.c --- a/usr/src/uts/common/inet/tcp/tcp_fusion.c Tue Feb 20 05:32:53 2007 -0800 +++ b/usr/src/uts/common/inet/tcp/tcp_fusion.c Tue Feb 20 09:46:06 2007 -0800 @@ -134,6 +134,20 @@ { ipsec_stack_t *ipss = ns->netstack_ipsec; + /* + * If ire is not cached, do not use fusion + */ + if (tcp->tcp_connp->conn_ire_cache == NULL) { + /* + * There is no need to hold conn_lock here because when called + * from tcp_fuse() there can be no window where conn_ire_cache + * can change. This is not true whe called from + * tcp_fuse_output(). conn_ire_cache can become null just + * after the check, but it's ok if a few packets are delivered + * in the fused state. + */ + return (B_TRUE); + } if (tcp->tcp_ipversion == IPV4_VERSION) { if (tcp->tcp_ip_hdr_len != IP_SIMPLE_HDR_LENGTH) return (B_TRUE);