diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 906bcf2..4892154 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -383,11 +383,14 @@ void iscsi_timeout_scan(struct iscsi_context *iscsi); void iscsi_reconnect_cb(struct iscsi_context *iscsi _U_, int status, void *command_data, void *private_data); +struct iscsi_pdu *iscsi_tcp_new_pdu(struct iscsi_context *iscsi, size_t size); + void iscsi_init_tcp_transport(struct iscsi_context *iscsi); struct iscsi_transport { int (*connect)(struct iscsi_context *iscsi, union socket_address *sa, int ai_family); int (*queue_pdu)(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); + struct iscsi_pdu* (*new_pdu)(struct iscsi_context *iscsi, size_t size); }; struct tcp_transport { diff --git a/lib/pdu.c b/lib/pdu.c index dc04244..5f6f79c 100644 --- a/lib/pdu.c +++ b/lib/pdu.c @@ -79,6 +79,16 @@ void iscsi_dump_pdu_header(struct iscsi_context *iscsi, unsigned char *data) { ISCSI_LOG(iscsi, 2, "PDU header:%s", dump); } +struct iscsi_pdu* +iscsi_tcp_new_pdu(struct iscsi_context *iscsi, size_t size) +{ + struct iscsi_pdu *pdu; + + pdu = iscsi_szmalloc(iscsi, size); + + return pdu; +} + struct iscsi_pdu * iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, enum iscsi_opcode response_opcode, uint32_t itt, @@ -86,7 +96,7 @@ iscsi_allocate_pdu(struct iscsi_context *iscsi, enum iscsi_opcode opcode, { struct iscsi_pdu *pdu; - pdu = iscsi_szmalloc(iscsi, sizeof(struct iscsi_pdu)); + pdu = iscsi->t->new_pdu(iscsi, sizeof(struct iscsi_pdu)); if (pdu == NULL) { iscsi_set_error(iscsi, "failed to allocate pdu"); return NULL; diff --git a/lib/socket.c b/lib/socket.c index d0904e7..efdf83d 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -1055,6 +1055,7 @@ void iscsi_init_tcp_transport(struct iscsi_context *iscsi) { iscsi->t->connect = iscsi_tcp_connect; iscsi->t->queue_pdu = iscsi_tcp_queue_pdu; + iscsi->t->new_pdu = iscsi_tcp_new_pdu; return; }