Signed-off-by: Roy Shterman <
ro...@mellanox.com>
---
include/iscsi-private.h | 1 +
include/iscsi.h | 2 ++
lib/pdu.c | 12 +++++++++++-
lib/socket.c | 1 +
4 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/include/iscsi-private.h b/include/iscsi-private.h
index e69dc37..9f09519 100644
--- a/include/iscsi-private.h
+++ b/include/iscsi-private.h
@@ -79,6 +79,7 @@ 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 iscsi_tcp_transport {
diff --git a/include/iscsi.h b/include/iscsi.h
index d560915..b470232 100644
--- a/include/iscsi.h
+++ b/include/iscsi.h
@@ -69,6 +69,8 @@ static inline int iscsi_string_to_transport(char *transport) {
EXTERN int iscsi_tcp_connect(struct iscsi_context *iscsi, union socket_address *sa, int ai_family);
+EXTERN struct iscsi_pdu* iscsi_tcp_new_pdu(struct iscsi_context *iscsi, size_t size);
+
EXTERN int iscsi_tcp_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu);
EXTERN void iscsi_set_cache_allocations(struct iscsi_context *iscsi, int ca);
diff --git a/lib/pdu.c b/lib/pdu.c
index ebffe17..d6e4a84 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 2bd60a4..cb96cbf 100644
--- a/lib/socket.c
+++ b/lib/socket.c
@@ -78,6 +78,7 @@ static struct iscsi_transport tcp_transport =
{
.connect = iscsi_tcp_connect,
.queue_pdu = iscsi_tcp_queue_pdu,
+ .new_pdu = iscsi_tcp_new_pdu,
};
void iscsi_init_tcp_transport(struct iscsi_context *iscsi)
--
1.7.8.2