From e3df0bbf96c09b73d6b3bd77707d100d71cc3c56 Mon Sep 17 00:00:00 2001 From: Roy Shterman Date: Fri, 27 May 2016 18:47:16 +0300 Subject: [PATCH] Libiscsi: Adding queue pdu function to transport abstraction include/iscsi-private: adding queue_pdu in transport function pointers struct include/iscsi: declaration of tcp_queue_pdu function socket: adding queue_pdu function to transport initialization all_library: changing iscsi_queue_pdu into iscsi->t->queue_pdu Signed-off-by: Roy Shterman --- include/iscsi-private.h | 21 +++++++++------------ lib/discovery.c | 2 +- lib/iscsi-command.c | 4 ++-- lib/login.c | 4 ++-- lib/nop.c | 4 ++-- lib/socket.c | 5 +++-- lib/task_mgmt.c | 2 +- 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/include/iscsi-private.h b/include/iscsi-private.h index 3b1ade7..906bcf2 100644 --- a/include/iscsi-private.h +++ b/include/iscsi-private.h @@ -75,17 +75,6 @@ union socket_address { struct sockaddr sa; }; -struct iscsi_transport { - - int (*connect)(struct iscsi_context *iscsi, union socket_address *sa, int ai_family); -}; - -struct tcp_transport { - - struct iscsi_transport t; - -}; - struct iscsi_context { struct iscsi_transport *t; @@ -306,7 +295,6 @@ void iscsi_pdu_set_datasn(struct iscsi_pdu *pdu, uint32_t datasn); void iscsi_pdu_set_bufferoffset(struct iscsi_pdu *pdu, uint32_t bufferoffset); int iscsi_pdu_add_data(struct iscsi_context *iscsi, struct iscsi_pdu *pdu, unsigned char *dptr, int dsize); -int iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu); int iscsi_add_data(struct iscsi_context *iscsi, struct iscsi_data *data, unsigned char *dptr, int dsize, int pdualignment); @@ -397,6 +385,15 @@ void iscsi_reconnect_cb(struct iscsi_context *iscsi _U_, int status, 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 tcp_transport { + struct iscsi_transport t; +}; + #ifdef __cplusplus } #endif diff --git a/lib/discovery.c b/lib/discovery.c index a6077cb..5e803a4 100644 --- a/lib/discovery.c +++ b/lib/discovery.c @@ -80,7 +80,7 @@ iscsi_discovery_async(struct iscsi_context *iscsi, iscsi_command_cb cb, pdu->callback = cb; pdu->private_data = private_data; - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi " "text pdu."); iscsi_free_pdu(iscsi, pdu); diff --git a/lib/iscsi-command.c b/lib/iscsi-command.c index a2c4463..406fd19 100644 --- a/lib/iscsi-command.c +++ b/lib/iscsi-command.c @@ -129,7 +129,7 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu, /* update data segment length */ scsi_set_uint32(&pdu->outdata.data[4], pdu->payload_len); - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi " "scsi pdu."); goto error; @@ -280,7 +280,7 @@ iscsi_scsi_command_async(struct iscsi_context *iscsi, int lun, pdu->callback = iscsi_scsi_response_cb; pdu->private_data = &pdu->scsi_cbdata; - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi " "scsi pdu."); iscsi_free_pdu(iscsi, pdu); diff --git a/lib/login.c b/lib/login.c index bc1c50e..1346f85 100644 --- a/lib/login.c +++ b/lib/login.c @@ -1002,7 +1002,7 @@ iscsi_login_async(struct iscsi_context *iscsi, iscsi_command_cb cb, pdu->callback = cb; pdu->private_data = private_data; - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi " "pdu."); iscsi_free_pdu(iscsi, pdu); @@ -1319,7 +1319,7 @@ iscsi_logout_async(struct iscsi_context *iscsi, iscsi_command_cb cb, pdu->callback = cb; pdu->private_data = private_data; - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi " "logout pdu."); iscsi_free_pdu(iscsi, pdu); diff --git a/lib/nop.c b/lib/nop.c index 16ce748..d5a08eb 100644 --- a/lib/nop.c +++ b/lib/nop.c @@ -78,7 +78,7 @@ iscsi_nop_out_async(struct iscsi_context *iscsi, iscsi_command_cb cb, } } - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "failed to queue iscsi nop-out pdu"); iscsi_free_pdu(iscsi, pdu); return -1; @@ -122,7 +122,7 @@ iscsi_send_target_nop_out(struct iscsi_context *iscsi, uint32_t ttt, uint32_t lu /* cmdsn is not increased if Immediate delivery*/ iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn); - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "failed to queue iscsi nop-out pdu"); iscsi_free_pdu(iscsi, pdu); return -1; diff --git a/lib/socket.c b/lib/socket.c index 14772df..d0904e7 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -918,8 +918,8 @@ iscsi_service(struct iscsi_context *iscsi, int revents) return 0; } -int -iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu) +static int iscsi_tcp_queue_pdu(struct iscsi_context *iscsi, + struct iscsi_pdu *pdu) { if (pdu == NULL) { iscsi_set_error(iscsi, "trying to queue NULL pdu"); @@ -1054,6 +1054,7 @@ void iscsi_set_bind_interfaces(struct iscsi_context *iscsi, char * interfaces _U void iscsi_init_tcp_transport(struct iscsi_context *iscsi) { iscsi->t->connect = iscsi_tcp_connect; + iscsi->t->queue_pdu = iscsi_tcp_queue_pdu; return; } diff --git a/lib/task_mgmt.c b/lib/task_mgmt.c index 1fd3f5f..b4d7242 100644 --- a/lib/task_mgmt.c +++ b/lib/task_mgmt.c @@ -81,7 +81,7 @@ iscsi_task_mgmt_async(struct iscsi_context *iscsi, pdu->callback = cb; pdu->private_data = private_data; - if (iscsi_queue_pdu(iscsi, pdu) != 0) { + if (iscsi->t->queue_pdu(iscsi, pdu) != 0) { iscsi_set_error(iscsi, "failed to queue iscsi taskmgmt pdu"); iscsi_free_pdu(iscsi, pdu); return -1;