RECONNCT fix broken reconnect for iov out vectors

We where modifying out_offset and out_len in iscsi_write_to_socket().
If the packet that was being sent before reconnect was a write command
the was a significant change that out_offset and out_len where already
touched. When requeing the packet after reconnect we where
sending garbage!

Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
Peter Lieven
2012-12-06 10:27:40 +01:00
parent 237729545a
commit 5f18c72706
3 changed files with 8 additions and 6 deletions

View File

@@ -517,11 +517,11 @@ iscsi_write_to_socket(struct iscsi_context *iscsi)
}
/* Write any iovectors that might have been passed to us */
while (pdu->out_len > 0) {
while (pdu->out_written < pdu->out_len) {
unsigned char *buf;
count = pdu->out_len;
buf = iscsi_get_user_out_buffer(iscsi, pdu, pdu->out_offset, &count);
count = pdu->out_len - pdu->out_written;
buf = iscsi_get_user_out_buffer(iscsi, pdu, pdu->out_offset + pdu->out_written, &count);
if (buf == NULL) {
iscsi_set_error(iscsi, "Can't find iovector data for DATA-OUT");
return -1;
@@ -539,8 +539,7 @@ iscsi_write_to_socket(struct iscsi_context *iscsi)
"socket :%d", errno);
return -1;
}
pdu->out_offset += count;
pdu->out_len -= count;
pdu->out_written += count;
}
if (pdu->written == total) {