* [PATCH 5/5] iscsi: dequeue all buffers from queue
@ 2006-05-03 0:46 Mike Christie
0 siblings, 0 replies; only message in thread
From: Mike Christie @ 2006-05-03 0:46 UTC (permalink / raw)
To: linux-scsi
debugged by wrwhitehead@novell.com
patch and analysis by fujita.tomonori@lab.ntt.co.jp
Only tcp_read_sock and recv_actor (iscsi_tcp_data_recv for us) see
desc.count. It is is used just for permitting tcp_read_sock to read
the portion of data in the socket.
When iscsi_tcp_data_recv sees a partial header, it sets
desc.count. However, it is possible that the next skb (containing the
rest of the header) still does not come. So I'm not sure that this
scheme is completely correct.
Ideally, we should use the exact length of the data in the socket for
desc.count. However, it is not so simple (see SIOCINQ in
tcp_ioctl). So I think that iscsi_tcp_data_recv can just stop playing
with desc.count and tell tcp_read_sock to read the all skbs. As
proposed already, if iscsi_tcp_data_ready sets desc.count to
non-zero, tcp_read_sock does that.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c
index c0ce6ab..d94038e 100644
--- a/drivers/scsi/iscsi_tcp.c
+++ b/drivers/scsi/iscsi_tcp.c
@@ -922,11 +922,8 @@ more:
rc = iscsi_data_recv(conn);
if (rc) {
- if (rc == -EAGAIN) {
- rd_desc->count = tcp_conn->in.datalen -
- tcp_conn->in.ctask->data_count;
+ if (rc == -EAGAIN)
goto again;
- }
iscsi_conn_failure(conn, rc);
return 0;
}
@@ -983,9 +980,14 @@ iscsi_tcp_data_ready(struct sock *sk, in
read_lock(&sk->sk_callback_lock);
- /* use rd_desc to pass 'conn' to iscsi_tcp_data_recv */
+ /*
+ * Use rd_desc to pass 'conn' to iscsi_tcp_data_recv.
+ * We set count to 1 because we want the network layer to
+ * hand us all the skbs that are available. iscsi_tcp_data_recv
+ * handled pdus that cross buffers or pdus that still need data.
+ */
rd_desc.arg.data = conn;
- rd_desc.count = 0;
+ rd_desc.count = 1;
tcp_read_sock(sk, &rd_desc, iscsi_tcp_data_recv);
read_unlock(&sk->sk_callback_lock);
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2006-05-03 0:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-03 0:46 [PATCH 5/5] iscsi: dequeue all buffers from queue Mike Christie
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox