diff options
Diffstat (limited to 'drivers/scsi/iscsi_tcp.c')
-rw-r--r-- | drivers/scsi/iscsi_tcp.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index b7c092d63bbe..518dbd91df85 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c | |||
@@ -253,8 +253,6 @@ static int iscsi_sw_tcp_xmit_segment(struct iscsi_tcp_conn *tcp_conn, | |||
253 | 253 | ||
254 | if (r < 0) { | 254 | if (r < 0) { |
255 | iscsi_tcp_segment_unmap(segment); | 255 | iscsi_tcp_segment_unmap(segment); |
256 | if (copied || r == -EAGAIN) | ||
257 | break; | ||
258 | return r; | 256 | return r; |
259 | } | 257 | } |
260 | copied += r; | 258 | copied += r; |
@@ -275,11 +273,17 @@ static int iscsi_sw_tcp_xmit(struct iscsi_conn *conn) | |||
275 | 273 | ||
276 | while (1) { | 274 | while (1) { |
277 | rc = iscsi_sw_tcp_xmit_segment(tcp_conn, segment); | 275 | rc = iscsi_sw_tcp_xmit_segment(tcp_conn, segment); |
278 | if (rc < 0) { | 276 | /* |
277 | * We may not have been able to send data because the conn | ||
278 | * is getting stopped. libiscsi will know so propogate err | ||
279 | * for it to do the right thing. | ||
280 | */ | ||
281 | if (rc == -EAGAIN) | ||
282 | return rc; | ||
283 | else if (rc < 0) { | ||
279 | rc = ISCSI_ERR_XMIT_FAILED; | 284 | rc = ISCSI_ERR_XMIT_FAILED; |
280 | goto error; | 285 | goto error; |
281 | } | 286 | } else if (rc == 0) |
282 | if (rc == 0) | ||
283 | break; | 287 | break; |
284 | 288 | ||
285 | consumed += rc; | 289 | consumed += rc; |