aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/iscsid
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2017-01-20 17:14:10 +0000
committerAlexander Motin <mav@FreeBSD.org>2017-01-20 17:14:10 +0000
commit625571de20fb3a5fb37fb2d668fa9e5d56832260 (patch)
treef2d34852a08e1f70bd8ff142d90366a729ee6df4 /usr.sbin/iscsid
parentd6a85ec2ee6720bf9a6e2ee54e50ec0cc434ac94 (diff)
Remove ISCSI_MAX_DATA_SEGMENT_LENGTH, using negotiated value.
MFC after: 2 weeks
Notes
Notes: svn path=/head/; revision=312543
Diffstat (limited to 'usr.sbin/iscsid')
-rw-r--r--usr.sbin/iscsid/pdu.c50
1 files changed, 27 insertions, 23 deletions
diff --git a/usr.sbin/iscsid/pdu.c b/usr.sbin/iscsid/pdu.c
index 42224467b204..8db69ea3288b 100644
--- a/usr.sbin/iscsid/pdu.c
+++ b/usr.sbin/iscsid/pdu.c
@@ -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, char *data, size_t len)
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");