iscsi: correct data digest computation for extended LBA payload

This patch uses the newly added API spdk_dif_update_crc32c() when
DIF insert/strip is enabled.

Change-Id: Icf32a0ddef6cf92b0887b38495457e7fcac30987
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/456172
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ziye Yang <ziye.yang@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2019-05-29 16:24:02 +09:00 committed by Changpeng Liu
parent a7d832f28c
commit 872d8d8ea7

View File

@ -302,9 +302,19 @@ spdk_iscsi_pdu_calc_data_digest(struct spdk_iscsi_pdu *pdu)
uint32_t data_len = DGET24(pdu->bhs.data_segment_len);
uint32_t crc32c;
uint32_t mod;
struct iovec iov;
uint32_t num_blocks;
crc32c = SPDK_CRC32C_INITIAL;
if (spdk_likely(!pdu->dif_insert_or_strip)) {
crc32c = spdk_crc32c_update(pdu->data, data_len, crc32c);
} else {
iov.iov_base = pdu->data_buf;
iov.iov_len = pdu->data_buf_len;
num_blocks = pdu->data_buf_len / pdu->dif_ctx.block_size;
spdk_dif_update_crc32c(&iov, 1, num_blocks, &crc32c, &pdu->dif_ctx);
}
mod = data_len % ISCSI_ALIGNMENT;
if (mod != 0) {