diff options
author | Chris Leech <leech@pobox.com> | 2018-07-09 13:02:05 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-09 13:02:05 -0700 |
commit | f3c8e90fc0894c088950a15ee6618b427f9e2457 (patch) | |
tree | 0cd77dc53889efebb5f7994cb86184462f506464 | |
parent | 0d8196c71ea27a889819d94ea5ba01ee9bb45f15 (diff) | |
parent | a54966e121ef5deaee2e113d1c912a7dd85aca86 (diff) | |
download | open-iscsi-f3c8e90fc0894c088950a15ee6618b427f9e2457.tar.gz |
Merge pull request #115 from cleech/for_upstream
enable MaxOutstandingR2T negotiation
-rw-r--r-- | usr/initiator.h | 1 | ||||
-rw-r--r-- | usr/initiator_common.c | 3 | ||||
-rw-r--r-- | usr/login.c | 14 |
3 files changed, 8 insertions, 10 deletions
diff --git a/usr/initiator.h b/usr/initiator.h index 4f96d6b..3ee1454 100644 --- a/usr/initiator.h +++ b/usr/initiator.h @@ -212,6 +212,7 @@ typedef struct iscsi_session { int erl; uint32_t imm_data_en; uint32_t initial_r2t_en; + uint32_t max_r2t; uint32_t fast_abort; uint32_t first_burst; uint32_t max_burst; diff --git a/usr/initiator_common.c b/usr/initiator_common.c index 191e779..d00bd9e 100644 --- a/usr/initiator_common.c +++ b/usr/initiator_common.c @@ -173,6 +173,7 @@ iscsi_copy_operational_params(struct iscsi_conn *conn, /* session's operational parameters */ session->initial_r2t_en = session_conf->InitialR2T; + session->max_r2t = session_conf->MaxOutstandingR2T; session->imm_data_en = session_conf->ImmediateData; session->first_burst = align_32_down(session_conf->FirstBurstLength); /* @@ -375,7 +376,7 @@ int iscsi_session_set_neg_params(struct iscsi_conn *conn) .conn_only = 0, }, { .param = ISCSI_PARAM_MAX_R2T, - .value = &one, /* FIXME: session->max_r2t */ + .value = &session->max_r2t, .type = ISCSI_INT, .conn_only = 0, }, { diff --git a/usr/login.c b/usr/login.c index 294ad0b..d7dad21 100644 --- a/usr/login.c +++ b/usr/login.c @@ -524,14 +524,9 @@ get_op_params_text_keys(iscsi_session_t *session, int cid, text = value_end; } else if (iscsi_find_key_value("MaxOutstandingR2T", text, end, &value, &value_end)) { - if (session->type == ISCSI_SESSION_TYPE_NORMAL) { - if (strcmp(value, "1")) { - log_error("Login negotiation " - "failed, can't accept Max" - "OutstandingR2T %s", value); - return LOGIN_NEGOTIATION_FAILED; - } - } else + if (session->type == ISCSI_SESSION_TYPE_NORMAL) + session->max_r2t = strtoul(value, NULL, 0); + else session->irrelevant_keys_bitmap |= IRRELEVANT_MAXOUTSTANDINGR2T; text = value_end; @@ -810,8 +805,9 @@ add_params_normal_session(iscsi_session_t *session, struct iscsi_hdr *pdu, return 0; /* these we must have */ + sprintf(value, "%d", session->max_r2t); if (!iscsi_add_text(pdu, data, max_data_length, - "MaxOutstandingR2T", "1")) + "MaxOutstandingR2T", value)) return 0; if (!iscsi_add_text(pdu, data, max_data_length, "MaxConnections", "1")) |