socket: process PDUs directly after receiving them
this eliminated the need for an inqueue Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
@@ -61,7 +61,6 @@ struct iscsi_in_pdu {
|
||||
unsigned char *data;
|
||||
};
|
||||
void iscsi_free_iscsi_in_pdu(struct iscsi_context *iscsi, struct iscsi_in_pdu *in);
|
||||
void iscsi_free_iscsi_inqueue(struct iscsi_context *iscsi, struct iscsi_in_pdu *inqueue);
|
||||
|
||||
/* size of chap response field */
|
||||
#define CHAP_R_SIZE 16
|
||||
@@ -143,7 +142,6 @@ struct iscsi_context {
|
||||
struct iscsi_pdu *waitpdu;
|
||||
|
||||
struct iscsi_in_pdu *incoming;
|
||||
struct iscsi_in_pdu *inqueue;
|
||||
|
||||
uint32_t max_burst_length;
|
||||
uint32_t first_burst_length;
|
||||
|
||||
@@ -370,9 +370,6 @@ void iscsi_reconnect_cb(struct iscsi_context *iscsi _U_, int status,
|
||||
if (old_iscsi->incoming != NULL) {
|
||||
iscsi_free_iscsi_in_pdu(old_iscsi, old_iscsi->incoming);
|
||||
}
|
||||
if (old_iscsi->inqueue != NULL) {
|
||||
iscsi_free_iscsi_inqueue(old_iscsi, old_iscsi->inqueue);
|
||||
}
|
||||
|
||||
if (old_iscsi->outqueue_current != NULL && old_iscsi->outqueue_current->flags & ISCSI_PDU_DELETE_WHEN_SENT) {
|
||||
iscsi->drv->free_pdu(old_iscsi, old_iscsi->outqueue_current);
|
||||
|
||||
@@ -371,9 +371,6 @@ iscsi_destroy_context(struct iscsi_context *iscsi)
|
||||
if (iscsi->incoming != NULL) {
|
||||
iscsi_free_iscsi_in_pdu(iscsi, iscsi->incoming);
|
||||
}
|
||||
if (iscsi->inqueue != NULL) {
|
||||
iscsi_free_iscsi_inqueue(iscsi, iscsi->inqueue);
|
||||
}
|
||||
|
||||
iscsi->connect_data = NULL;
|
||||
|
||||
|
||||
28
lib/socket.c
28
lib/socket.c
@@ -567,9 +567,6 @@ iscsi_read_from_socket(struct iscsi_context *iscsi)
|
||||
{
|
||||
struct iscsi_in_pdu *in;
|
||||
ssize_t data_size, count, padding_size;
|
||||
int waitpdu_len, inqueue_len = 0;
|
||||
|
||||
ISCSI_LIST_LENGTH(&iscsi->waitpdu, waitpdu_len);
|
||||
|
||||
do {
|
||||
if (iscsi->incoming == NULL) {
|
||||
@@ -661,20 +658,13 @@ iscsi_read_from_socket(struct iscsi_context *iscsi)
|
||||
break;
|
||||
}
|
||||
|
||||
ISCSI_LIST_ADD_END(&iscsi->inqueue, in);
|
||||
inqueue_len++;
|
||||
iscsi->incoming = NULL;
|
||||
} while (iscsi->tcp_nonblocking && inqueue_len < waitpdu_len && iscsi->is_loggedin);
|
||||
|
||||
while (iscsi->inqueue != NULL) {
|
||||
struct iscsi_in_pdu *current = iscsi->inqueue;
|
||||
|
||||
if (iscsi_process_pdu(iscsi, current) != 0) {
|
||||
if (iscsi_process_pdu(iscsi, in) != 0) {
|
||||
iscsi_free_iscsi_in_pdu(iscsi, in);
|
||||
return -1;
|
||||
}
|
||||
ISCSI_LIST_REMOVE(&iscsi->inqueue, current);
|
||||
iscsi_free_iscsi_in_pdu(iscsi, current);
|
||||
}
|
||||
iscsi_free_iscsi_in_pdu(iscsi, in);
|
||||
} while (iscsi->tcp_nonblocking && iscsi->waitpdu && iscsi->is_loggedin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -990,16 +980,6 @@ iscsi_free_iscsi_in_pdu(struct iscsi_context *iscsi, struct iscsi_in_pdu *in)
|
||||
in=NULL;
|
||||
}
|
||||
|
||||
void
|
||||
iscsi_free_iscsi_inqueue(struct iscsi_context *iscsi, struct iscsi_in_pdu *inqueue)
|
||||
{
|
||||
while (inqueue != NULL) {
|
||||
struct iscsi_in_pdu *next = inqueue->next;
|
||||
iscsi_free_iscsi_in_pdu(iscsi, inqueue);
|
||||
inqueue = next;
|
||||
}
|
||||
}
|
||||
|
||||
void iscsi_set_tcp_syncnt(struct iscsi_context *iscsi, int value)
|
||||
{
|
||||
iscsi->tcp_syncnt=value;
|
||||
|
||||
Reference in New Issue
Block a user