svn commit: r312543 - head/usr.sbin/iscsid

Alexander Motin mav at FreeBSD.org
Fri Jan 20 17:14:12 UTC 2017


Author: mav
Date: Fri Jan 20 17:14:10 2017
New Revision: 312543
URL: https://svnweb.freebsd.org/changeset/base/312543

Log:
  Remove ISCSI_MAX_DATA_SEGMENT_LENGTH, using negotiated value.
  
  MFC after:	2 weeks

Modified:
  head/usr.sbin/iscsid/pdu.c

Modified: head/usr.sbin/iscsid/pdu.c
==============================================================================
--- head/usr.sbin/iscsid/pdu.c	Fri Jan 20 17:03:44 2017	(r312542)
+++ head/usr.sbin/iscsid/pdu.c	Fri Jan 20 17:14:10 2017	(r312543)
@@ -106,13 +106,15 @@ pdu_new_response(struct pdu *request)
 static void
 pdu_receive_proxy(struct pdu *pdu)
 {
+	struct connection *conn;
 	struct iscsi_daemon_receive *idr;
 	size_t len;
 	int error;
 
-	assert(pdu->pdu_connection->conn_conf.isc_iser != 0);
+	conn = pdu->pdu_connection;
+	assert(conn->conn_conf.isc_iser != 0);
 
-	pdu->pdu_data = malloc(ISCSI_MAX_DATA_SEGMENT_LENGTH);
+	pdu->pdu_data = malloc(conn->conn_max_recv_data_segment_length);
 	if (pdu->pdu_data == NULL)
 		log_err(1, "malloc");
 
@@ -120,12 +122,12 @@ pdu_receive_proxy(struct pdu *pdu)
 	if (idr == NULL)
 		log_err(1, "calloc");
 
-	idr->idr_session_id = pdu->pdu_connection->conn_session_id;
+	idr->idr_session_id = conn->conn_session_id;
 	idr->idr_bhs = pdu->pdu_bhs;
-	idr->idr_data_segment_len = ISCSI_MAX_DATA_SEGMENT_LENGTH;
+	idr->idr_data_segment_len = conn->conn_max_recv_data_segment_length;
 	idr->idr_data_segment = pdu->pdu_data;
 
-	error = ioctl(pdu->pdu_connection->conn_iscsi_fd, ISCSIDRECEIVE, idr);
+	error = ioctl(conn->conn_iscsi_fd, ISCSIDRECEIVE, idr);
 	if (error != 0)
 		log_err(1, "ISCSIDRECEIVE");
 
@@ -134,7 +136,7 @@ pdu_receive_proxy(struct pdu *pdu)
 		log_errx(1, "protocol error: non-empty AHS");
 
 	len = pdu_data_segment_length(pdu);
-	assert(len <= ISCSI_MAX_DATA_SEGMENT_LENGTH);
+	assert(len <= (size_t)conn->conn_max_recv_data_segment_length);
 	pdu->pdu_data_len = len;
 
 	free(idr);
@@ -143,10 +145,12 @@ pdu_receive_proxy(struct pdu *pdu)
 static void
 pdu_send_proxy(struct pdu *pdu)
 {
+	struct connection *conn;
 	struct iscsi_daemon_send *ids;
 	int error;
 
-	assert(pdu->pdu_connection->conn_conf.isc_iser != 0);
+	conn = pdu->pdu_connection;
+	assert(conn->conn_conf.isc_iser != 0);
 
 	pdu_set_data_segment_length(pdu, pdu->pdu_data_len);
 
@@ -154,12 +158,12 @@ pdu_send_proxy(struct pdu *pdu)
 	if (ids == NULL)
 		log_err(1, "calloc");
 
-	ids->ids_session_id = pdu->pdu_connection->conn_session_id;
+	ids->ids_session_id = conn->conn_session_id;
 	ids->ids_bhs = pdu->pdu_bhs;
 	ids->ids_data_segment_len = pdu->pdu_data_len;
 	ids->ids_data_segment = pdu->pdu_data;
 
-	error = ioctl(pdu->pdu_connection->conn_iscsi_fd, ISCSIDSEND, ids);
+	error = ioctl(conn->conn_iscsi_fd, ISCSIDSEND, ids);
 	if (error != 0)
 		log_err(1, "ISCSIDSEND");
 
@@ -204,18 +208,18 @@ pdu_read(const struct connection *conn, 
 void
 pdu_receive(struct pdu *pdu)
 {
+	struct connection *conn;
 	size_t len, padding;
 	char dummy[4];
 
+	conn = pdu->pdu_connection;
 #ifdef ICL_KERNEL_PROXY
-	if (pdu->pdu_connection->conn_conf.isc_iser != 0)
+	if (conn->conn_conf.isc_iser != 0)
 		return (pdu_receive_proxy(pdu));
 #endif
+	assert(conn->conn_conf.isc_iser == 0);
 
-	assert(pdu->pdu_connection->conn_conf.isc_iser == 0);
-
-	pdu_read(pdu->pdu_connection,
-	    (char *)pdu->pdu_bhs, sizeof(*pdu->pdu_bhs));
+	pdu_read(conn, (char *)pdu->pdu_bhs, sizeof(*pdu->pdu_bhs));
 
 	len = pdu_ahs_length(pdu);
 	if (len > 0)
@@ -223,10 +227,10 @@ pdu_receive(struct pdu *pdu)
 
 	len = pdu_data_segment_length(pdu);
 	if (len > 0) {
-		if (len > ISCSI_MAX_DATA_SEGMENT_LENGTH) {
+		if (len > (size_t)conn->conn_max_recv_data_segment_length) {
 			log_errx(1, "protocol error: received PDU "
 			    "with DataSegmentLength exceeding %d",
-			    ISCSI_MAX_DATA_SEGMENT_LENGTH);
+			    conn->conn_max_recv_data_segment_length);
 		}
 
 		pdu->pdu_data_len = len;
@@ -234,14 +238,12 @@ pdu_receive(struct pdu *pdu)
 		if (pdu->pdu_data == NULL)
 			log_err(1, "malloc");
 
-		pdu_read(pdu->pdu_connection,
-		    (char *)pdu->pdu_data, pdu->pdu_data_len);
+		pdu_read(conn, (char *)pdu->pdu_data, pdu->pdu_data_len);
 
 		padding = pdu_padding(pdu);
 		if (padding != 0) {
 			assert(padding < sizeof(dummy));
-			pdu_read(pdu->pdu_connection,
-			    (char *)dummy, padding);
+			pdu_read(conn, (char *)dummy, padding);
 		}
 	}
 }
@@ -249,18 +251,20 @@ pdu_receive(struct pdu *pdu)
 void
 pdu_send(struct pdu *pdu)
 {
+	struct connection *conn;
 	ssize_t ret, total_len;
 	size_t padding;
 	uint32_t zero = 0;
 	struct iovec iov[3];
 	int iovcnt;
 
+	conn = pdu->pdu_connection;
 #ifdef ICL_KERNEL_PROXY
-	if (pdu->pdu_connection->conn_conf.isc_iser != 0)
+	if (conn->conn_conf.isc_iser != 0)
 		return (pdu_send_proxy(pdu));
 #endif
 
-	assert(pdu->pdu_connection->conn_conf.isc_iser == 0);
+	assert(conn->conn_conf.isc_iser == 0);
 
 	pdu_set_data_segment_length(pdu, pdu->pdu_data_len);
 	iov[0].iov_base = pdu->pdu_bhs;
@@ -284,7 +288,7 @@ pdu_send(struct pdu *pdu)
 		}
 	}
 
-	ret = writev(pdu->pdu_connection->conn_socket, iov, iovcnt);
+	ret = writev(conn->conn_socket, iov, iovcnt);
 	if (ret < 0) {
 		if (timed_out())
 			log_errx(1, "exiting due to timeout");


More information about the svn-src-head mailing list