diff --git a/lib/init.c b/lib/init.c index 9f009ea..1451906 100644 --- a/lib/init.c +++ b/lib/init.c @@ -512,6 +512,7 @@ iscsi_set_immediate_data(struct iscsi_context *iscsi, enum iscsi_immediate_data } iscsi->want_immediate_data = immediate_data; + iscsi->use_immediate_data = immediate_data; return 0; } diff --git a/lib/login.c b/lib/login.c index 6635629..a3004f5 100644 --- a/lib/login.c +++ b/lib/login.c @@ -1007,6 +1007,12 @@ iscsi_process_login_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, if (!strncmp(ptr, "ImmediateData=", 14)) { if (!strcmp(ptr + 14, "No")) { iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + } else if (iscsi->want_immediate_data == ISCSI_IMMEDIATE_DATA_NO) { + /* If we negotiated NO, it doesnt matter what + * the target said. ImmediateData is NO. + */ + iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_NO; + } else { iscsi->use_immediate_data = ISCSI_IMMEDIATE_DATA_YES; }