diff --git a/include/iscsi.h b/include/iscsi.h index a3cbf54..11e014c 100644 --- a/include/iscsi.h +++ b/include/iscsi.h @@ -47,6 +47,10 @@ int iscsi_which_events(struct iscsi_context *iscsi); * file descriptor. */ int iscsi_service(struct iscsi_context *iscsi, int revents); +/* + * How many commands are in flight. + */ +int iscsi_queue_length(struct iscsi_context *iscsi); diff --git a/lib/socket.c b/lib/socket.c index e6df382..4ed6e97 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -188,6 +188,25 @@ iscsi_which_events(struct iscsi_context *iscsi) return events; } +int +iscsi_queue_length(struct iscsi_context *iscsi) +{ + int i = 0; + struct iscsi_pdu *pdu; + + for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { + i++; + } + for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { + i++; + } + if (iscsi->is_connected == 0) { + i++; + } + + return i; +} + static int iscsi_read_from_socket(struct iscsi_context *iscsi) {