From 6548753cd628de230f580585d9ddbcfdf4083589 Mon Sep 17 00:00:00 2001 From: Vladislav Bolkhovitin Date: Fri, 24 Sep 2010 14:43:40 +0000 Subject: [PATCH] Merge of trunk r2236: Fix for incorrect initialization of conn->read_msg.msg_iovlen. But looks like this value is rather ignored in the TCP stack and read_size used instead, so all worked fine. Noticed by yue git-svn-id: http://svn.code.sf.net/p/scst/svn/branches/2.0.0.x@2237 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- iscsi-scst/kernel/iscsi.c | 10 +++++----- iscsi-scst/kernel/nthread.c | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/iscsi-scst/kernel/iscsi.c b/iscsi-scst/kernel/iscsi.c index 0122671ca..8262e1e44 100644 --- a/iscsi-scst/kernel/iscsi.c +++ b/iscsi-scst/kernel/iscsi.c @@ -1563,16 +1563,16 @@ static int cmnd_prepare_recv_pdu(struct iscsi_conn *conn, conn->read_iov[i].iov_base = addr + offset; if (size <= sg_len) { - TRACE_DBG("idx=%d, offset=%u, size=%d, addr=%p", - idx, offset, size, addr); + TRACE_DBG("idx=%d, i=%d, offset=%u, size=%d, addr=%p", + idx, i, offset, size, addr); conn->read_iov[i].iov_len = size; - conn->read_msg.msg_iovlen = i; + conn->read_msg.msg_iovlen = i+1; break; } conn->read_iov[i].iov_len = sg_len; - TRACE_DBG("idx=%d, offset=%u, size=%d, sg_len=%u, addr=%p", - idx, offset, size, sg_len, addr); + TRACE_DBG("idx=%d, i=%d, offset=%u, size=%d, sg_len=%u, " + "addr=%p", idx, i, offset, size, sg_len, addr); size -= sg_len; buff_offs += sg_len; diff --git a/iscsi-scst/kernel/nthread.c b/iscsi-scst/kernel/nthread.c index 063947f71..513cf0d2f 100644 --- a/iscsi-scst/kernel/nthread.c +++ b/iscsi-scst/kernel/nthread.c @@ -715,6 +715,9 @@ restart: MSG_DONTWAIT | MSG_NOSIGNAL); set_fs(oldfs); + TRACE_DBG("msg_iovlen %d, first_len %d, read_size %d, res %d", + msg.msg_iovlen, first_len, conn->read_size, res); + if (res > 0) { /* * To save some considerable effort and CPU power we @@ -729,6 +732,7 @@ restart: if (conn->read_size != 0) { if (res >= first_len) { int done = 1 + ((res - first_len) >> PAGE_SHIFT); + TRACE_DBG("done %d", done); conn->read_msg.msg_iov += done; conn->read_msg.msg_iovlen -= done; }