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");
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to