diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 1cd6367..9f7e965 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -175,6 +175,11 @@ void iscsi_free_scsi_cbdata(struct iscsi_scsi_cbdata *scsi_cbdata); struct iscsi_pdu *iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, enum iscsi_opcode response_opcode); +struct iscsi_pdu *iscsi_allocate_pdu_with_itt_flags(struct iscsi_context *iscsi, + enum iscsi_opcode opcode, + enum iscsi_opcode response_opcode, + uint32_t itt, + uint32_t flags); void iscsi_free_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); void iscsi_pdu_set_pduflags(struct iscsi_pdu *pdu, unsigned char flags); void iscsi_pdu_set_immediate(struct iscsi_pdu *pdu); diff --git a/lib/pdu.c b/lib/pdu.c index 8711e92..252cd0a 100644 --- a/lib/pdu.c +++ b/lib/pdu.c @@ -26,8 +26,8 @@ #include "slist.h" struct iscsi_pdu * -iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, - enum iscsi_opcode response_opcode) +iscsi_allocate_pdu_with_itt_flags(struct iscsi_context *iscsi, enum iscsi_opcode opcode, + enum iscsi_opcode response_opcode, uint32_t itt, uint32_t flags) { struct iscsi_pdu *pdu; @@ -58,14 +58,22 @@ iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, } /* itt */ - *(uint32_t *)&pdu->outdata.data[16] = htonl(iscsi->itt); - pdu->itt = iscsi->itt; + iscsi_pdu_set_itt(pdu, itt); + pdu->itt = itt; - iscsi->itt++; + /* flags */ + pdu->flags = flags; return pdu; } +struct iscsi_pdu * +iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, + enum iscsi_opcode response_opcode) +{ + return iscsi_allocate_pdu_with_itt_flags(iscsi, opcode, response_opcode, iscsi->itt++, 0); +} + void iscsi_free_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) {