Remove ISCSI_MAX_DATA_SEGMENT_LENGTH, using negotiated value.
MFC after: 2 weeks
This commit is contained in:
parent
d6a85ec2ee
commit
625571de20
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=312543
@ -106,13 +106,15 @@ pdu_new_response(struct pdu *request)
|
|||||||
static void
|
static void
|
||||||
pdu_receive_proxy(struct pdu *pdu)
|
pdu_receive_proxy(struct pdu *pdu)
|
||||||
{
|
{
|
||||||
|
struct connection *conn;
|
||||||
struct iscsi_daemon_receive *idr;
|
struct iscsi_daemon_receive *idr;
|
||||||
size_t len;
|
size_t len;
|
||||||
int error;
|
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)
|
if (pdu->pdu_data == NULL)
|
||||||
log_err(1, "malloc");
|
log_err(1, "malloc");
|
||||||
|
|
||||||
@ -120,12 +122,12 @@ pdu_receive_proxy(struct pdu *pdu)
|
|||||||
if (idr == NULL)
|
if (idr == NULL)
|
||||||
log_err(1, "calloc");
|
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_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;
|
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)
|
if (error != 0)
|
||||||
log_err(1, "ISCSIDRECEIVE");
|
log_err(1, "ISCSIDRECEIVE");
|
||||||
|
|
||||||
@ -134,7 +136,7 @@ pdu_receive_proxy(struct pdu *pdu)
|
|||||||
log_errx(1, "protocol error: non-empty AHS");
|
log_errx(1, "protocol error: non-empty AHS");
|
||||||
|
|
||||||
len = pdu_data_segment_length(pdu);
|
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;
|
pdu->pdu_data_len = len;
|
||||||
|
|
||||||
free(idr);
|
free(idr);
|
||||||
@ -143,10 +145,12 @@ pdu_receive_proxy(struct pdu *pdu)
|
|||||||
static void
|
static void
|
||||||
pdu_send_proxy(struct pdu *pdu)
|
pdu_send_proxy(struct pdu *pdu)
|
||||||
{
|
{
|
||||||
|
struct connection *conn;
|
||||||
struct iscsi_daemon_send *ids;
|
struct iscsi_daemon_send *ids;
|
||||||
int error;
|
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);
|
pdu_set_data_segment_length(pdu, pdu->pdu_data_len);
|
||||||
|
|
||||||
@ -154,12 +158,12 @@ pdu_send_proxy(struct pdu *pdu)
|
|||||||
if (ids == NULL)
|
if (ids == NULL)
|
||||||
log_err(1, "calloc");
|
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_bhs = pdu->pdu_bhs;
|
||||||
ids->ids_data_segment_len = pdu->pdu_data_len;
|
ids->ids_data_segment_len = pdu->pdu_data_len;
|
||||||
ids->ids_data_segment = pdu->pdu_data;
|
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)
|
if (error != 0)
|
||||||
log_err(1, "ISCSIDSEND");
|
log_err(1, "ISCSIDSEND");
|
||||||
|
|
||||||
@ -204,18 +208,18 @@ pdu_read(const struct connection *conn, char *data, size_t len)
|
|||||||
void
|
void
|
||||||
pdu_receive(struct pdu *pdu)
|
pdu_receive(struct pdu *pdu)
|
||||||
{
|
{
|
||||||
|
struct connection *conn;
|
||||||
size_t len, padding;
|
size_t len, padding;
|
||||||
char dummy[4];
|
char dummy[4];
|
||||||
|
|
||||||
|
conn = pdu->pdu_connection;
|
||||||
#ifdef ICL_KERNEL_PROXY
|
#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));
|
return (pdu_receive_proxy(pdu));
|
||||||
#endif
|
#endif
|
||||||
|
assert(conn->conn_conf.isc_iser == 0);
|
||||||
|
|
||||||
assert(pdu->pdu_connection->conn_conf.isc_iser == 0);
|
pdu_read(conn, (char *)pdu->pdu_bhs, sizeof(*pdu->pdu_bhs));
|
||||||
|
|
||||||
pdu_read(pdu->pdu_connection,
|
|
||||||
(char *)pdu->pdu_bhs, sizeof(*pdu->pdu_bhs));
|
|
||||||
|
|
||||||
len = pdu_ahs_length(pdu);
|
len = pdu_ahs_length(pdu);
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
@ -223,10 +227,10 @@ pdu_receive(struct pdu *pdu)
|
|||||||
|
|
||||||
len = pdu_data_segment_length(pdu);
|
len = pdu_data_segment_length(pdu);
|
||||||
if (len > 0) {
|
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 "
|
log_errx(1, "protocol error: received PDU "
|
||||||
"with DataSegmentLength exceeding %d",
|
"with DataSegmentLength exceeding %d",
|
||||||
ISCSI_MAX_DATA_SEGMENT_LENGTH);
|
conn->conn_max_recv_data_segment_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
pdu->pdu_data_len = len;
|
pdu->pdu_data_len = len;
|
||||||
@ -234,14 +238,12 @@ pdu_receive(struct pdu *pdu)
|
|||||||
if (pdu->pdu_data == NULL)
|
if (pdu->pdu_data == NULL)
|
||||||
log_err(1, "malloc");
|
log_err(1, "malloc");
|
||||||
|
|
||||||
pdu_read(pdu->pdu_connection,
|
pdu_read(conn, (char *)pdu->pdu_data, pdu->pdu_data_len);
|
||||||
(char *)pdu->pdu_data, pdu->pdu_data_len);
|
|
||||||
|
|
||||||
padding = pdu_padding(pdu);
|
padding = pdu_padding(pdu);
|
||||||
if (padding != 0) {
|
if (padding != 0) {
|
||||||
assert(padding < sizeof(dummy));
|
assert(padding < sizeof(dummy));
|
||||||
pdu_read(pdu->pdu_connection,
|
pdu_read(conn, (char *)dummy, padding);
|
||||||
(char *)dummy, padding);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -249,18 +251,20 @@ pdu_receive(struct pdu *pdu)
|
|||||||
void
|
void
|
||||||
pdu_send(struct pdu *pdu)
|
pdu_send(struct pdu *pdu)
|
||||||
{
|
{
|
||||||
|
struct connection *conn;
|
||||||
ssize_t ret, total_len;
|
ssize_t ret, total_len;
|
||||||
size_t padding;
|
size_t padding;
|
||||||
uint32_t zero = 0;
|
uint32_t zero = 0;
|
||||||
struct iovec iov[3];
|
struct iovec iov[3];
|
||||||
int iovcnt;
|
int iovcnt;
|
||||||
|
|
||||||
|
conn = pdu->pdu_connection;
|
||||||
#ifdef ICL_KERNEL_PROXY
|
#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));
|
return (pdu_send_proxy(pdu));
|
||||||
#endif
|
#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);
|
pdu_set_data_segment_length(pdu, pdu->pdu_data_len);
|
||||||
iov[0].iov_base = pdu->pdu_bhs;
|
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 (ret < 0) {
|
||||||
if (timed_out())
|
if (timed_out())
|
||||||
log_errx(1, "exiting due to timeout");
|
log_errx(1, "exiting due to timeout");
|
||||||
|
Loading…
Reference in New Issue
Block a user