mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 11:46:19 +00:00
iscsi_tcp: propogate EAGAIN from sendpage to libiscsi
The net layer might return -EAGAIN because it could not get space/mem within the sock sndtimeo or becuase the tcp/ip connection was down. For the latter we do not want to retry because the conn/session should just be shutdown and restarted. libiscsi knows the state of the session recovery so propogate this error to that layer. It will either do iscsi recovery or have us retry the operation. Right now if we have partially sent a pdu we would always retry the IO xmit slowing down recovery. Signed-off-by: Mike Christie <michaelc@cs.wisc.edu> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
d355e57d58
commit
32382492eb
1 changed files with 9 additions and 5 deletions
|
@ -253,8 +253,6 @@ static int iscsi_sw_tcp_xmit_segment(struct iscsi_tcp_conn *tcp_conn,
|
|||
|
||||
if (r < 0) {
|
||||
iscsi_tcp_segment_unmap(segment);
|
||||
if (copied || r == -EAGAIN)
|
||||
break;
|
||||
return r;
|
||||
}
|
||||
copied += r;
|
||||
|
@ -275,11 +273,17 @@ static int iscsi_sw_tcp_xmit(struct iscsi_conn *conn)
|
|||
|
||||
while (1) {
|
||||
rc = iscsi_sw_tcp_xmit_segment(tcp_conn, segment);
|
||||
if (rc < 0) {
|
||||
/*
|
||||
* We may not have been able to send data because the conn
|
||||
* is getting stopped. libiscsi will know so propogate err
|
||||
* for it to do the right thing.
|
||||
*/
|
||||
if (rc == -EAGAIN)
|
||||
return rc;
|
||||
else if (rc < 0) {
|
||||
rc = ISCSI_ERR_XMIT_FAILED;
|
||||
goto error;
|
||||
}
|
||||
if (rc == 0)
|
||||
} else if (rc == 0)
|
||||
break;
|
||||
|
||||
consumed += rc;
|
||||
|
|
Loading…
Reference in a new issue