changeset 3683:39e9a07d770e

6522934 When tcp fuse is on, taking a logical network interface down doesn't freeze connections
author rshoaib
date Tue, 20 Feb 2007 09:46:06 -0800
parents 48f0fd311ddb
children a0773f73b68d
files usr/src/uts/common/inet/tcp/tcp_fusion.c
diffstat 1 files changed, 14 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- 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);