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 <roysh@mellanox.com>
This commit is contained in:
committed by
Ronnie Sahlberg
parent
0d6362ffe6
commit
e3df0bbf96
@@ -75,17 +75,6 @@ union socket_address {
|
|||||||
struct sockaddr sa;
|
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_context {
|
||||||
|
|
||||||
struct iscsi_transport *t;
|
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);
|
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,
|
int iscsi_pdu_add_data(struct iscsi_context *iscsi, struct iscsi_pdu *pdu,
|
||||||
unsigned char *dptr, int dsize);
|
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,
|
int iscsi_add_data(struct iscsi_context *iscsi, struct iscsi_data *data,
|
||||||
unsigned char *dptr, int dsize, int pdualignment);
|
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);
|
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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ iscsi_discovery_async(struct iscsi_context *iscsi, iscsi_command_cb cb,
|
|||||||
pdu->callback = cb;
|
pdu->callback = cb;
|
||||||
pdu->private_data = private_data;
|
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 "
|
iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi "
|
||||||
"text pdu.");
|
"text pdu.");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu,
|
|||||||
/* update data segment length */
|
/* update data segment length */
|
||||||
scsi_set_uint32(&pdu->outdata.data[4], pdu->payload_len);
|
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 "
|
iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi "
|
||||||
"scsi pdu.");
|
"scsi pdu.");
|
||||||
goto error;
|
goto error;
|
||||||
@@ -280,7 +280,7 @@ iscsi_scsi_command_async(struct iscsi_context *iscsi, int lun,
|
|||||||
pdu->callback = iscsi_scsi_response_cb;
|
pdu->callback = iscsi_scsi_response_cb;
|
||||||
pdu->private_data = &pdu->scsi_cbdata;
|
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 "
|
iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi "
|
||||||
"scsi pdu.");
|
"scsi pdu.");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
|
|||||||
@@ -1002,7 +1002,7 @@ iscsi_login_async(struct iscsi_context *iscsi, iscsi_command_cb cb,
|
|||||||
pdu->callback = cb;
|
pdu->callback = cb;
|
||||||
pdu->private_data = private_data;
|
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 "
|
iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi "
|
||||||
"pdu.");
|
"pdu.");
|
||||||
iscsi_free_pdu(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->callback = cb;
|
||||||
pdu->private_data = private_data;
|
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 "
|
iscsi_set_error(iscsi, "Out-of-memory: failed to queue iscsi "
|
||||||
"logout pdu.");
|
"logout pdu.");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
|
|||||||
@@ -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_set_error(iscsi, "failed to queue iscsi nop-out pdu");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
return -1;
|
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*/
|
/* cmdsn is not increased if Immediate delivery*/
|
||||||
iscsi_pdu_set_cmdsn(pdu, iscsi->cmdsn);
|
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_set_error(iscsi, "failed to queue iscsi nop-out pdu");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
@@ -918,8 +918,8 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int iscsi_tcp_queue_pdu(struct iscsi_context *iscsi,
|
||||||
iscsi_queue_pdu(struct iscsi_context *iscsi, struct iscsi_pdu *pdu)
|
struct iscsi_pdu *pdu)
|
||||||
{
|
{
|
||||||
if (pdu == NULL) {
|
if (pdu == NULL) {
|
||||||
iscsi_set_error(iscsi, "trying to queue NULL pdu");
|
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)
|
void iscsi_init_tcp_transport(struct iscsi_context *iscsi)
|
||||||
{
|
{
|
||||||
iscsi->t->connect = iscsi_tcp_connect;
|
iscsi->t->connect = iscsi_tcp_connect;
|
||||||
|
iscsi->t->queue_pdu = iscsi_tcp_queue_pdu;
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ iscsi_task_mgmt_async(struct iscsi_context *iscsi,
|
|||||||
pdu->callback = cb;
|
pdu->callback = cb;
|
||||||
pdu->private_data = private_data;
|
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_set_error(iscsi, "failed to queue iscsi taskmgmt pdu");
|
||||||
iscsi_free_pdu(iscsi, pdu);
|
iscsi_free_pdu(iscsi, pdu);
|
||||||
return -1;
|
return -1;
|
||||||
|
|||||||
Reference in New Issue
Block a user