From 6358538aa708bde183f0dcff0c9dc55bb7babda1 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 15 Feb 2021 03:25:38 +0900 Subject: [PATCH] lib/iscsi: Pass the range (offset and length) to iscsi_conn_read_data_segment() This will make the current code simpler and make the following changes easier. Signed-off-by: Shuhei Matsumoto Change-Id: I5a06f7e876fee03ed05d880525b594f92cadcdca Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6410 Reviewed-by: Ziye Yang Reviewed-by: Changpeng Liu Reviewed-by: Jim Harris Tested-by: SPDK CI Jenkins Community-CI: Mellanox Build Bot --- lib/iscsi/iscsi.c | 17 ++++++++--------- test/app/fuzz/iscsi_fuzz/iscsi_fuzz.c | 4 +++- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/iscsi/iscsi.c b/lib/iscsi/iscsi.c index 2f5967801..3a8c0a352 100644 --- a/lib/iscsi/iscsi.c +++ b/lib/iscsi/iscsi.c @@ -348,27 +348,23 @@ iscsi_pdu_calc_data_digest(struct spdk_iscsi_pdu *pdu) static int iscsi_conn_read_data_segment(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu, - uint32_t segment_len) + uint32_t data_offset, uint32_t data_len) { struct iovec buf_iov, iovs[32]; int rc, _rc; if (spdk_likely(!pdu->dif_insert_or_strip)) { - return iscsi_conn_read_data(conn, - segment_len - pdu->data_valid_bytes, - pdu->data + pdu->data_valid_bytes); + return iscsi_conn_read_data(conn, data_len, pdu->data + data_offset); } else { buf_iov.iov_base = pdu->data; buf_iov.iov_len = pdu->data_buf_len; rc = spdk_dif_set_md_interleave_iovs(iovs, 32, &buf_iov, 1, - pdu->data_valid_bytes, - segment_len - pdu->data_valid_bytes, NULL, + data_offset, data_len, NULL, &pdu->dif_ctx); if (rc > 0) { rc = iscsi_conn_readv_data(conn, iovs, rc); if (rc > 0) { - _rc = spdk_dif_generate_stream(&buf_iov, 1, - pdu->data_valid_bytes, rc, + _rc = spdk_dif_generate_stream(&buf_iov, 1, data_offset, rc, &pdu->dif_ctx); if (_rc != 0) { SPDK_ERRLOG("DIF generate failed\n"); @@ -4590,7 +4586,10 @@ iscsi_pdu_payload_read(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu) /* copy the actual data into local buffer */ if ((pdu->data_valid_bytes < data_len)) { - rc = iscsi_conn_read_data_segment(conn, pdu, data_len); + rc = iscsi_conn_read_data_segment(conn, + pdu, + pdu->data_valid_bytes, + data_len - pdu->data_valid_bytes); if (rc < 0) { return rc; } diff --git a/test/app/fuzz/iscsi_fuzz/iscsi_fuzz.c b/test/app/fuzz/iscsi_fuzz/iscsi_fuzz.c index a7dc2fee2..8261ae82d 100644 --- a/test/app/fuzz/iscsi_fuzz/iscsi_fuzz.c +++ b/test/app/fuzz/iscsi_fuzz/iscsi_fuzz.c @@ -488,7 +488,9 @@ iscsi_fuzz_read_pdu(struct spdk_iscsi_conn *conn) /* copy the actual data into local buffer */ if (pdu->data_valid_bytes < data_len) { - rc = iscsi_conn_read_data_segment(conn, pdu, data_len); + rc = iscsi_conn_read_data_segment(conn, pdu, + pdu->data_valid_bytes, + data_len - pdu->data_valid_bytes); if (rc < 0) { conn->pdu_recv_state = ISCSI_PDU_RECV_STATE_ERROR; break;