diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2009-05-13 18:57:44 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2009-05-23 16:44:11 -0400 |
commit | d1acfae514425d680912907c6554852f1e258551 (patch) | |
tree | 54cf742c2b988d2a728c68d3ac8be9f0212e4f49 /drivers | |
parent | 26013ad4c43f49a038a6489c35e9b901491339fe (diff) |
[SCSI] libiscsi_tcp: update recv tracking for each skb instead of iscsi pdu
Everytime we read in a pdu libiscsi will update a tracking field.
It uses this to decide when to check if the transport might be bad.
If we have not got data in recv_timeout seconds then we will
send a iscsi ping/nop.
If we are on a slow link then it could take a while to read in all
the data for a data_in. In that case we might send a ping/nop when
we do not need to or we might drop a session thinking it is bad
when the lower layer is making forward progress on it.
This patch has libiscsi_tcp update the recv tracking for each skb
(basically network packet from our point of view) instead of the
entire iscsi pdu+data, so we account for these cases where data is
coming in slowly.
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/scsi/libiscsi_tcp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/scsi/libiscsi_tcp.c b/drivers/scsi/libiscsi_tcp.c index db93cd0dfdb6..b84a1d853f29 100644 --- a/drivers/scsi/libiscsi_tcp.c +++ b/drivers/scsi/libiscsi_tcp.c | |||
@@ -863,6 +863,12 @@ int iscsi_tcp_recv_skb(struct iscsi_conn *conn, struct sk_buff *skb, | |||
863 | int rc = 0; | 863 | int rc = 0; |
864 | 864 | ||
865 | ISCSI_DBG_TCP(conn, "in %d bytes\n", skb->len - offset); | 865 | ISCSI_DBG_TCP(conn, "in %d bytes\n", skb->len - offset); |
866 | /* | ||
867 | * Update for each skb instead of pdu, because over slow networks a | ||
868 | * data_in's data could take a while to read in. We also want to | ||
869 | * account for r2ts. | ||
870 | */ | ||
871 | conn->last_recv = jiffies; | ||
866 | 872 | ||
867 | if (unlikely(conn->suspend_rx)) { | 873 | if (unlikely(conn->suspend_rx)) { |
868 | ISCSI_DBG_TCP(conn, "Rx suspended!\n"); | 874 | ISCSI_DBG_TCP(conn, "Rx suspended!\n"); |