changeset 14071:da0f6329dac3

3861 tcp buffer size tunables for iscsi connections Reviewed by: Peng Dai <peng.dai@delphix.com> Reviewed by: Sebastien Roy <sebastien.roy@delphix.com> Reviewed by: Dan McDonald <danmcd@nexenta.com> Approved by: Dan McDonald <danmcd@nexenta.com>
author Jeff Biseda <jeff.biseda@delphix.com>
date Wed, 03 Jul 2013 11:54:31 -0800
parents d4c9f8eba8fa
children 706bba24f9ab
files usr/src/uts/common/io/idm/idm_so.c
diffstat 1 files changed, 14 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/idm/idm_so.c	Wed Jul 03 08:13:38 2013 -0800
+++ b/usr/src/uts/common/io/idm/idm_so.c	Wed Jul 03 11:54:31 2013 -0800
@@ -22,6 +22,9 @@
  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
  * Use is subject to license terms.
  */
+/*
+ * Copyright (c) 2013 by Delphix. All rights reserved.
+ */
 
 #include <sys/conf.h>
 #include <sys/stat.h>
@@ -70,8 +73,7 @@
 
 static void idm_set_ini_preconnect_options(idm_so_conn_t *sc,
     boolean_t boot_conn);
-static void idm_set_ini_postconnect_options(idm_so_conn_t *sc);
-static void idm_set_tgt_connect_options(ksocket_t so);
+static void idm_set_postconnect_options(ksocket_t so);
 static idm_status_t idm_i_so_tx(idm_pdu_t *pdu);
 
 static idm_status_t idm_sorecvdata(idm_conn_t *ic, idm_pdu_t *pdu);
@@ -162,6 +164,10 @@
 };
 
 kmutex_t	idm_so_timed_socket_mutex;
+
+int32_t idm_so_sndbuf = IDM_SNDBUF_SIZE;
+int32_t idm_so_rcvbuf = IDM_RCVBUF_SIZE;
+
 /*
  * idm_so_init()
  * Sockets transport initialization
@@ -707,33 +713,15 @@
 }
 
 static void
-idm_set_ini_postconnect_options(idm_so_conn_t *sc)
+idm_set_postconnect_options(ksocket_t ks)
 {
-	int32_t		rcvbuf = IDM_RCVBUF_SIZE;
-	int32_t		sndbuf = IDM_SNDBUF_SIZE;
-	const int	on = 1;
-
-	/* Set postconnect options */
-	(void) ksocket_setsockopt(sc->ic_so, IPPROTO_TCP, TCP_NODELAY,
-	    (char *)&on, sizeof (int), CRED());
-	(void) ksocket_setsockopt(sc->ic_so, SOL_SOCKET, SO_RCVBUF,
-	    (char *)&rcvbuf, sizeof (int), CRED());
-	(void) ksocket_setsockopt(sc->ic_so, SOL_SOCKET, SO_SNDBUF,
-	    (char *)&sndbuf, sizeof (int), CRED());
-}
-
-static void
-idm_set_tgt_connect_options(ksocket_t ks)
-{
-	int32_t		rcvbuf = IDM_RCVBUF_SIZE;
-	int32_t		sndbuf = IDM_SNDBUF_SIZE;
 	const int	on = 1;
 
 	/* Set connect options */
 	(void) ksocket_setsockopt(ks, SOL_SOCKET, SO_RCVBUF,
-	    (char *)&rcvbuf, sizeof (int), CRED());
+	    (char *)&idm_so_rcvbuf, sizeof (int), CRED());
 	(void) ksocket_setsockopt(ks, SOL_SOCKET, SO_SNDBUF,
-	    (char *)&sndbuf, sizeof (int), CRED());
+	    (char *)&idm_so_sndbuf, sizeof (int), CRED());
 	(void) ksocket_setsockopt(ks, IPPROTO_TCP, TCP_NODELAY,
 	    (char *)&on, sizeof (on), CRED());
 }
@@ -960,7 +948,7 @@
 
 	idm_so_conn_connect_common(ic);
 
-	idm_set_ini_postconnect_options(so_conn);
+	idm_set_postconnect_options(so_conn->ic_so);
 
 	return (IDM_STATUS_SUCCESS);
 }
@@ -970,6 +958,7 @@
 {
 	idm_status_t	idmrc;
 
+	idm_set_postconnect_options(new_so);
 	idmrc = idm_so_conn_create_common(ic, new_so);
 
 	return (idmrc);
@@ -1170,7 +1159,7 @@
 		}
 	}
 
-	idm_set_tgt_connect_options(so_svc->is_so);
+	idm_set_postconnect_options(so_svc->is_so);
 
 	if (ksocket_listen(so_svc->is_so, 5, CRED()) != 0) {
 		mutex_exit(&is->is_mutex);