From dd6831a50fb917dee1c624a129fb28932a2c5a3d Mon Sep 17 00:00:00 2001 From: Peter Lieven Date: Mon, 23 Feb 2015 07:53:41 +0100 Subject: [PATCH] iscsi-command: fix unsolicited data-out length the recent implementation allows to send iscsi->first_burst_length + iscsi->target_max_recv_data_segment_length bytes if immediate and unsolicited data-out is send and iscsi->target_max_recv_data_segment_length < iscsi->first_burst_length. RFC3720 defines the length as: Length=(min(FirstBurstLength, Expected Data Transfer Length) - Received Immediate Data Length). so that immediate data and unsolicited data-out are together FirstBurstLength at maximum. Signed-off-by: Peter Lieven --- lib/iscsi-command.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/iscsi-command.c b/lib/iscsi-command.c index c874d9a..f186935 100644 --- a/lib/iscsi-command.c +++ b/lib/iscsi-command.c @@ -193,11 +193,8 @@ iscsi_timeout_scan(struct iscsi_context *iscsi) int iscsi_send_unsolicited_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) { - uint32_t len = pdu->expxferlen - pdu->payload_len; + uint32_t len = MIN(pdu->expxferlen, iscsi->first_burst_length) - pdu->payload_len; - if (len > iscsi->first_burst_length) { - len = iscsi->first_burst_length; - } return iscsi_send_data_out(iscsi, pdu, 0xffffffff, pdu->payload_len, len); }