From d240e8b5aa70eb1e2acf0bbbbfda66730b4937f1 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Sun, 2 Jan 2011 18:42:36 +1100 Subject: [PATCH] Use an initiator specific and one target specific value for MaxRecvDataSegmentLength --- include/iscsi-private.h | 3 ++- lib/init.c | 15 ++++++++------- lib/login.c | 4 ++-- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 222c0e7..69d9071 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -95,7 +95,8 @@ struct iscsi_context { uint32_t max_burst_length; uint32_t first_burst_length; - uint32_t max_recv_data_segment_length; + uint32_t initiator_max_recv_data_segment_length; + uint32_t target_max_recv_data_segment_length; enum iscsi_initial_r2t want_initial_r2t; enum iscsi_initial_r2t use_initial_r2t; enum iscsi_initial_r2t want_immediate_data; diff --git a/lib/init.c b/lib/init.c index e5eef93..34924b8 100644 --- a/lib/init.c +++ b/lib/init.c @@ -60,13 +60,14 @@ iscsi_create_context(const char *initiator_name) iscsi->next_phase = ISCSI_PDU_LOGIN_NSG_OPNEG; iscsi->secneg_phase = ISCSI_LOGIN_SECNEG_PHASE_OFFER_CHAP; - iscsi->max_burst_length = 262144; - iscsi->first_burst_length = 262144; - iscsi->max_recv_data_segment_length = 262144; - iscsi->want_initial_r2t = ISCSI_INITIAL_R2T_NO; - iscsi->use_initial_r2t = ISCSI_INITIAL_R2T_NO; - iscsi->want_immediate_data = ISCSI_IMMEDIATE_DATA_YES; - iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_YES; + iscsi->max_burst_length = 262144; + iscsi->first_burst_length = 262144; + iscsi->initiator_max_recv_data_segment_length = 262144; + iscsi->target_max_recv_data_segment_length = 8192; + iscsi->want_initial_r2t = ISCSI_INITIAL_R2T_NO; + iscsi->use_initial_r2t = ISCSI_INITIAL_R2T_NO; + iscsi->want_immediate_data = ISCSI_IMMEDIATE_DATA_YES; + iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_YES; return iscsi; } diff --git a/lib/login.c b/lib/login.c index db50af0..ab31e43 100644 --- a/lib/login.c +++ b/lib/login.c @@ -283,7 +283,7 @@ iscsi_login_add_maxrecvdatasegmentlength(struct iscsi_context *iscsi, struct isc return 0; } - asprintf(&str, "MaxRecvDataSegmentLength=%d", iscsi->max_recv_data_segment_length); + asprintf(&str, "MaxRecvDataSegmentLength=%d", iscsi->initiator_max_recv_data_segment_length); if (iscsi_pdu_add_data(iscsi, pdu, (unsigned char *)str, strlen(str)+1) != 0) { iscsi_set_error(iscsi, "Out-of-memory: pdu add data failed."); @@ -958,7 +958,7 @@ iscsi_process_login_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, } if (!strncmp((char *)ptr, "MaxRecvDataSegmentLength=", 25)) { - iscsi->max_recv_data_segment_length = strtol((char *)ptr + 25, NULL, 10); + iscsi->target_max_recv_data_segment_length = strtol((char *)ptr + 25, NULL, 10); } if (!strncmp((char *)ptr, "AuthMethod=", 11)) {