DATASN: We have to increment DATASN in each DATA-OUT PDU in a sequence.
For writes that span across multiple DATA-OUT segments we have to increment the DATASN field for each segment. We didnt use to, and most targets were perfectly happy, ignoring that the DATASN was constant 0 for every DATAOUT we sent. LIO however does check this and did cause it to reject the libiscsi test tool. (This is something we should write a iscsi test for so we can flag all non-LIO targets as broken and needing to be fixed) Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
@@ -182,6 +182,7 @@ struct iscsi_pdu {
|
|||||||
uint32_t lun;
|
uint32_t lun;
|
||||||
uint32_t itt;
|
uint32_t itt;
|
||||||
uint32_t cmdsn;
|
uint32_t cmdsn;
|
||||||
|
uint32_t datasn;
|
||||||
enum iscsi_opcode response_opcode;
|
enum iscsi_opcode response_opcode;
|
||||||
|
|
||||||
iscsi_command_cb callback;
|
iscsi_command_cb callback;
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu,
|
|||||||
iscsi_pdu_set_expstatsn(pdu, iscsi->statsn+1);
|
iscsi_pdu_set_expstatsn(pdu, iscsi->statsn+1);
|
||||||
|
|
||||||
/* data sn */
|
/* data sn */
|
||||||
iscsi_pdu_set_datasn(pdu, 0);
|
iscsi_pdu_set_datasn(pdu, cmd_pdu->datasn++);
|
||||||
|
|
||||||
/* buffer offset */
|
/* buffer offset */
|
||||||
iscsi_pdu_set_bufferoffset(pdu, offset);
|
iscsi_pdu_set_bufferoffset(pdu, offset);
|
||||||
|
|||||||
Reference in New Issue
Block a user