From a98b6e63f0127ea30da8b123387019b075a04ee3 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Thu, 2 Aug 2012 09:46:42 +1000 Subject: [PATCH] MAXCMDSN: Stop sending new PDUs to the target when maxcmdsn is reached Signed-off-by: Ronnie Sahlberg --- lib/socket.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/socket.c b/lib/socket.c index a9048d5..1bcbbd4 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -204,8 +204,8 @@ iscsi_which_events(struct iscsi_context *iscsi) { int events = iscsi->is_connected ? POLLIN : POLLOUT; - if (iscsi->outqueue) { - events |= POLLOUT; + if (iscsi->outqueue && iscsi->outqueue->cmdsn <= iscsi->maxcmdsn) { + events |= POLLOUT; } return events; } @@ -338,9 +338,14 @@ iscsi_write_to_socket(struct iscsi_context *iscsi) return -1; } - while (iscsi->outqueue != NULL) { + while (iscsi->outqueue) { ssize_t total; + if (iscsi->outqueue->cmdsn > iscsi->maxcmdsn) { + /* stop sending. maxcmdsn is reached */ + return 0; + } + total = iscsi->outqueue->outdata.size; total = (total + 3) & 0xfffffffc;