aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2014-11-22 15:09:18 +0000
committerAlexander Motin <mav@FreeBSD.org>2014-11-22 15:09:18 +0000
commit8b94b5836c23624d4619aca93f6a2a51681ada63 (patch)
treeaeb65e65f9fc0f17e3b1102476294ff7d9c3f021 /usr.sbin/iscsid
parent14730efd7e32afe0a5780f6dcaba6186d4b807d9 (diff)
downloadsrc-8b94b5836c23624d4619aca93f6a2a51681ada63.tar.gz
src-8b94b5836c23624d4619aca93f6a2a51681ada63.zip
For both iSCSI initiator and target increase socket buffer sizes before
establishing connection. This is a workaround for Chelsio TOE driver, that does not update socket buffer size in hardware after connection established, and unless that is done beforehand, kernel code will stuck, attempting to send/receive full PDU at once. MFC after: 1 week
Notes
Notes: svn path=/head/; revision=274853
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/iscsid.c10
-rw-r--r--usr.sbin/iscsid/iscsid.h1
2 files changed, 10 insertions, 1 deletions
diff --git a/usr.sbin/iscsid/iscsid.c b/usr.sbin/iscsid/iscsid.c
index a7f489e24039..a6feb6ab6d9e 100644
--- a/usr.sbin/iscsid/iscsid.c
+++ b/usr.sbin/iscsid/iscsid.c
@@ -160,7 +160,7 @@ connection_new(unsigned int session_id, const uint8_t isid[8], uint16_t tsih,
#ifdef ICL_KERNEL_PROXY
struct iscsi_daemon_connect idc;
#endif
- int error;
+ int error, sockbuf;
conn = calloc(1, sizeof(*conn));
if (conn == NULL)
@@ -237,6 +237,14 @@ connection_new(unsigned int session_id, const uint8_t isid[8], uint16_t tsih,
fail(conn, strerror(errno));
log_err(1, "failed to create socket for %s", from_addr);
}
+ sockbuf = SOCKBUF_SIZE;
+ if (setsockopt(conn->conn_socket, SOL_SOCKET, SO_RCVBUF,
+ &sockbuf, sizeof(sockbuf)) == -1)
+ log_warn("setsockopt(SO_RCVBUF) failed");
+ sockbuf = SOCKBUF_SIZE;
+ if (setsockopt(conn->conn_socket, SOL_SOCKET, SO_SNDBUF,
+ &sockbuf, sizeof(sockbuf)) == -1)
+ log_warn("setsockopt(SO_SNDBUF) failed");
if (from_ai != NULL) {
error = bind(conn->conn_socket, from_ai->ai_addr,
from_ai->ai_addrlen);
diff --git a/usr.sbin/iscsid/iscsid.h b/usr.sbin/iscsid/iscsid.h
index b05c222ce9cb..9ad3325cf17e 100644
--- a/usr.sbin/iscsid/iscsid.h
+++ b/usr.sbin/iscsid/iscsid.h
@@ -44,6 +44,7 @@
#define CONN_DIGEST_CRC32C 1
#define CONN_MUTUAL_CHALLENGE_LEN 1024
+#define SOCKBUF_SIZE 1048576
struct connection {
int conn_iscsi_fd;