MFC r260083:
Fix extremely slow operation with data digests enabled. This was caused by receive code waiting for data digest even when the data segment was empty. It didn't actually read it, but it waited until those four bytes become available in the socket buffer, i.e. until any other PDU (e.g. NOP) came in. Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
1c069ec47a
commit
a92d8da5ad
@ -239,7 +239,7 @@ icl_pdu_size(const struct icl_pdu *response)
|
||||
icl_pdu_padding(response);
|
||||
if (response->ip_conn->ic_header_crc32c)
|
||||
len += ISCSI_HEADER_DIGEST_SIZE;
|
||||
if (response->ip_conn->ic_data_crc32c)
|
||||
if (response->ip_data_len != 0 && response->ip_conn->ic_data_crc32c)
|
||||
len += ISCSI_DATA_DIGEST_SIZE;
|
||||
|
||||
return (len);
|
||||
@ -615,7 +615,7 @@ icl_conn_receive_pdu(struct icl_conn *ic, size_t *availablep)
|
||||
break;
|
||||
|
||||
ic->ic_receive_state = ICL_CONN_STATE_DATA_DIGEST;
|
||||
if (ic->ic_data_crc32c == false)
|
||||
if (request->ip_data_len == 0 || ic->ic_data_crc32c == false)
|
||||
ic->ic_receive_len = 0;
|
||||
else
|
||||
ic->ic_receive_len = ISCSI_DATA_DIGEST_SIZE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user