Lines Matching defs:pdu
176 iscsi_reject(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu,
186 pdu->is_rejected = true;
188 total_ahs_len = pdu->bhs.total_ahs_len;
213 memcpy(data, &pdu->bhs, ISCSI_BHS_LEN);
218 memcpy(data + data_len, pdu->ahs, total_ahs_len);
223 memcpy(data + data_len, pdu->header_digest, ISCSI_DIGEST_LEN);
260 iscsi_pdu_calc_header_digest(struct spdk_iscsi_pdu *pdu)
263 uint32_t ahs_len_bytes = pdu->bhs.total_ahs_len * 4;
266 crc32c = spdk_crc32c_update(&pdu->bhs, ISCSI_BHS_LEN, crc32c);
269 crc32c = spdk_crc32c_update(pdu->ahs, ahs_len_bytes, crc32c);
280 iscsi_pdu_calc_partial_data_digest(struct spdk_iscsi_pdu *pdu)
285 if (spdk_likely(!pdu->dif_insert_or_strip)) {
286 pdu->crc32c = spdk_crc32c_update(pdu->data,
287 pdu->data_valid_bytes - pdu->data_offset,
288 pdu->crc32c);
290 iov.iov_base = pdu->data;
291 iov.iov_len = pdu->data_buf_len;
292 num_blocks = pdu->data_buf_len / pdu->dif_ctx.block_size;
294 spdk_dif_update_crc32c(&iov, 1, num_blocks, &pdu->crc32c, &pdu->dif_ctx);
299 iscsi_pdu_calc_partial_data_digest_done(struct spdk_iscsi_pdu *pdu)
301 uint32_t crc32c = pdu->crc32c;
305 mod = pdu->data_valid_bytes % ISCSI_ALIGNMENT;
320 iscsi_pdu_calc_data_digest(struct spdk_iscsi_pdu *pdu)
322 uint32_t data_len = DGET24(pdu->bhs.data_segment_len);
332 if (spdk_likely(!pdu->dif_insert_or_strip)) {
333 crc32c = spdk_crc32c_update(pdu->data, data_len, crc32c);
335 iov.iov_base = pdu->data;
336 iov.iov_len = pdu->data_buf_len;
337 num_blocks = pdu->data_buf_len / pdu->dif_ctx.block_size;
339 spdk_dif_update_crc32c(&iov, 1, num_blocks, &crc32c, &pdu->dif_ctx);
358 struct spdk_iscsi_pdu *pdu,
364 if (spdk_likely(!pdu->dif_insert_or_strip)) {
365 return iscsi_conn_read_data(conn, data_len, pdu->data + data_offset);
367 buf_iov.iov_base = pdu->data;
368 buf_iov.iov_len = pdu->data_buf_len;
371 &pdu->dif_ctx);
376 &pdu->dif_ctx);
430 struct spdk_iscsi_pdu *pdu, uint32_t *_mapped_length)
441 total_ahs_len = pdu->bhs.total_ahs_len;
442 data_len = DGET24(pdu->bhs.data_segment_len);
446 if (pdu->bhs.opcode == ISCSI_OP_LOGIN_RSP) {
451 spdk_iov_sgl_init(&sgl, iovs, iovcnt, pdu->writev_offset);
454 if (!spdk_iov_sgl_append(&sgl, (uint8_t *)&pdu->bhs, ISCSI_BHS_LEN)) {
459 if (!spdk_iov_sgl_append(&sgl, pdu->ahs, 4 * total_ahs_len)) {
466 if (!spdk_iov_sgl_append(&sgl, pdu->header_digest, ISCSI_DIGEST_LEN)) {
473 if (!pdu->dif_insert_or_strip) {
474 if (!spdk_iov_sgl_append(&sgl, pdu->data, data_len)) {
478 if (!_iscsi_sgl_append_with_md(&sgl, pdu->data, pdu->data_buf_len,
479 data_len, &pdu->dif_ctx)) {
487 spdk_iov_sgl_append(&sgl, pdu->data_digest, ISCSI_DIGEST_LEN);
1192 struct spdk_iscsi_pdu *pdu, struct spdk_iscsi_pdu *rsp_pdu)
1213 reqh = (struct iscsi_bhs_login_req *)&pdu->bhs;
1230 SPDK_LOGDUMP(iscsi, "PDU", (uint8_t *)&pdu->bhs, ISCSI_BHS_LEN);
1289 struct spdk_iscsi_pdu *pdu, struct spdk_iscsi_pdu *rsp_pdu,
1296 reqh = (struct iscsi_bhs_login_req *)&pdu->bhs;
1299 rc = iscsi_parse_params(params, pdu->data,
1300 pdu->data_segment_len, ISCSI_BHS_LOGIN_GET_CBIT(reqh->flags),
2170 iscsi_pdu_hdr_op_login(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
2181 reqh = (struct iscsi_bhs_login_req *)&pdu->bhs;
2182 pdu->cmd_sn = from_be32(&reqh->cmd_sn);
2187 if (pdu->data_segment_len > SPDK_ISCSI_FIRST_BURST_LENGTH) {
2188 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
2195 rc = iscsi_op_login_rsp_init(conn, pdu, rsp_pdu);
2206 iscsi_pdu_payload_op_login(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
2221 reqh = (struct iscsi_bhs_login_req *)&pdu->bhs;
2224 rc = iscsi_op_login_store_incoming_params(conn, pdu, rsp_pdu, ¶ms);
2250 iscsi_pdu_hdr_op_text(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
2257 if (pdu->data_segment_len > iscsi_get_max_immediate_data_size()) {
2259 pdu->data_segment_len, iscsi_get_max_immediate_data_size());
2260 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
2263 reqh = (struct iscsi_bhs_text_req *)&pdu->bhs;
2275 pdu->cmd_sn, ExpStatSN, conn->StatSN, conn->sess->ExpCmdSN,
2305 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
2320 iscsi_pdu_payload_op_text(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
2338 reqh = (struct iscsi_bhs_text_req *)&pdu->bhs;
2346 rc = iscsi_parse_params(¶ms, pdu->data, pdu->data_segment_len,
2354 if (pdu->data_segment_len == 0 && params == NULL) {
2511 iscsi_pdu_hdr_op_logout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
2521 reqh = (struct iscsi_bhs_logout_req *)&pdu->bhs;
2541 pdu->cmd_sn, ExpStatSN, conn->StatSN,
2544 if (pdu->cmd_sn != conn->sess->ExpCmdSN) {
2545 SPDK_DEBUGLOG(iscsi, "CmdSN(%u) might have dropped\n", pdu->cmd_sn);
2550 pdu->cmd_sn, ExpStatSN, conn->StatSN);
2593 to_be32(&rsph->exp_cmd_sn, pdu->cmd_sn);
2594 to_be32(&rsph->max_cmd_sn, pdu->cmd_sn);
2651 /* This function is used to remove the r2t pdu from snack_pdu_list by < task, r2t_sn> info */
2657 struct spdk_iscsi_pdu *pdu;
2660 TAILQ_FOREACH(pdu, &conn->snack_pdu_list, tailq) {
2661 if (pdu->bhs.opcode == ISCSI_OP_R2T) {
2662 r2t_header = (struct iscsi_bhs_r2t *)&pdu->bhs;
2663 if (pdu->task == task &&
2665 TAILQ_REMOVE(&conn->snack_pdu_list, pdu, tailq);
2666 return pdu;
2680 struct spdk_iscsi_pdu *pdu;
2686 /* remove the r2t pdu from the snack_list */
2687 pdu = iscsi_remove_r2t_pdu_from_snack_list(conn, task, r2t_sn);
2688 if (!pdu) {
2689 SPDK_DEBUGLOG(iscsi, "No pdu is found\n");
2698 to_be32(&pdu->bhs.stat_sn, conn->StatSN);
2699 iscsi_conn_write_pdu(conn, pdu, iscsi_conn_pdu_generic_complete, NULL);
2701 rsph = (struct iscsi_bhs_r2t *)&pdu->bhs;
2710 iscsi_conn_free_pdu(conn, pdu);
2712 /* re-send a new r2t pdu */
2833 struct spdk_iscsi_pdu *pdu)
2841 (pdu == NULL || spdk_sn32_lt(pdu_tmp->cmd_sn, pdu->cmd_sn))) {
2864 (pdu == NULL || spdk_sn32_lt(pdu_tmp->cmd_sn, pdu->cmd_sn))) {
3067 /* The last pdu in all data-in pdus */
3200 * This function compare the input pdu's bhs with the pdu's bhs associated by
3205 struct spdk_iscsi_pdu *pdu)
3210 if (!memcmp(&pdu->bhs, iscsi_task_get_bhs(task), ISCSI_BHS_LEN)) {
3216 if (!memcmp(&pdu->bhs, iscsi_task_get_bhs(task), ISCSI_BHS_LEN)) {
3228 (uintptr_t)task, (uintptr_t)task->pdu);
3255 struct spdk_iscsi_pdu *pdu, struct spdk_mobj *mobj)
3266 iscsi_task_associate_pdu(subtask, pdu);
3270 if (spdk_likely(!pdu->dif_insert_or_strip)) {
3273 spdk_scsi_task_set_data(&subtask->scsi, mobj->buf, pdu->data_buf_len);
3283 struct spdk_iscsi_pdu *pdu;
3289 pdu = iscsi_task_get_pdu(task);
3290 reqh = (struct iscsi_bhs_scsi_req *)&pdu->bhs;
3295 pdu->data_segment_len < transfer_len) {
3305 if (pdu->data_segment_len != 0) {
3306 mobj = pdu->mobj[0];
3309 if (!pdu->dif_insert_or_strip &&
3313 pdu->mobj[0] = NULL;
3316 rc = iscsi_submit_write_subtask(conn, task, pdu, mobj);
3326 if (pdu->data_segment_len == transfer_len) {
3328 if (spdk_likely(!pdu->dif_insert_or_strip)) {
3329 spdk_scsi_task_set_data(&task->scsi, pdu->data, pdu->data_segment_len);
3331 spdk_scsi_task_set_data(&task->scsi, pdu->data, pdu->data_buf_len);
3341 iscsi_pdu_hdr_op_scsi(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3358 reqh = (struct iscsi_bhs_scsi_req *)&pdu->bhs;
3375 iscsi_task_associate_pdu(task, pdu);
3408 (iscsi_compare_pdu_bhs_within_existed_r2t_tasks(conn, pdu))) {
3414 if (pdu->data_segment_len > iscsi_get_max_immediate_data_size()) {
3416 pdu->data_segment_len, iscsi_get_max_immediate_data_size());
3418 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3421 if (pdu->data_segment_len > transfer_len) {
3423 pdu->data_segment_len, transfer_len);
3425 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3428 /* check the ImmediateData and also pdu->data_segment_len */
3429 if ((!conn->sess->ImmediateData && (pdu->data_segment_len > 0)) ||
3430 (pdu->data_segment_len > conn->sess->FirstBurstLength)) {
3432 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3435 if (spdk_unlikely(spdk_scsi_lun_get_dif_ctx(task->scsi.lun, &task->scsi, &pdu->dif_ctx))) {
3436 pdu->dif_insert_or_strip = true;
3437 } else if (reqh->final_bit && pdu->data_segment_len < transfer_len) {
3438 pdu->data_buf_len = spdk_min(transfer_len,
3447 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
3451 pdu->task = task;
3456 iscsi_pdu_payload_op_scsi(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3460 if (pdu->task == NULL) {
3464 task = pdu->task;
3497 if (task->pdu == NULL) {
3505 reqh = (struct iscsi_bhs_task_req *)&task->pdu->bhs;
3593 task->pdu);
3611 iscsi_pdu_hdr_op_task(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3627 reqh = (struct iscsi_bhs_task_req *)&pdu->bhs;
3648 iscsi_task_associate_pdu(task, pdu);
3675 iscsi_clear_all_transfer_task(conn, task->scsi.lun, pdu);
3692 iscsi_clear_all_transfer_task(conn, task->scsi.lun, pdu);
3723 iscsi_pdu_hdr_op_nopout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3735 reqh = (struct iscsi_bhs_nop_out *)&pdu->bhs;
3738 if (pdu->data_segment_len > SPDK_ISCSI_MAX_RECV_DATA_SEGMENT_LENGTH) {
3739 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3749 pdu->cmd_sn, conn->StatSN, conn->sess->ExpCmdSN,
3769 iscsi_pdu_payload_op_nopout(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3780 reqh = (struct iscsi_bhs_nop_out *)&pdu->bhs;
3783 data_len = pdu->data_segment_len;
3814 memcpy(data, pdu->data, data_len);
3847 * task transfertag and the pdu's opcode
3852 struct spdk_iscsi_pdu *pdu;
3855 TAILQ_FOREACH(pdu, &conn->snack_pdu_list, tailq) {
3856 if (pdu->bhs.opcode == ISCSI_OP_SCSI_DATAIN) {
3857 datain_bhs = (struct iscsi_bhs_data_in *)&pdu->bhs;
3859 return pdu->task;
3868 * initiator task tag and the pdu's opcode
3874 struct spdk_iscsi_pdu *pdu;
3876 TAILQ_FOREACH(pdu, &conn->snack_pdu_list, tailq) {
3877 if (pdu->bhs.opcode == opcode &&
3878 pdu->task != NULL &&
3879 pdu->task->tag == task_tag) {
3880 return pdu->task;
3891 struct spdk_iscsi_pdu *pdu, uint32_t beg_run,
3903 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3914 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
3933 struct spdk_iscsi_pdu *pdu, uint32_t beg_run,
3952 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
3988 iscsi_handle_status_snack(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
3998 reqh = (struct iscsi_bhs_snack_req *)&pdu->bhs;
4013 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
4043 iscsi_handle_data_ack(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4055 reqh = (struct iscsi_bhs_snack_req *)&pdu->bhs;
4082 /* To free the pdu */
4103 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_SNACK);
4108 iscsi_pdu_hdr_op_snack(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4123 reqh = (struct iscsi_bhs_snack_req *)&pdu->bhs;
4126 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4134 reqh = (struct iscsi_bhs_snack_req *)&pdu->bhs;
4146 return iscsi_handle_recovery_datain(conn, task, pdu,
4151 return iscsi_handle_r2t_snack(conn, task, pdu, beg_run,
4158 rc = iscsi_handle_status_snack(conn, pdu);
4161 rc = iscsi_handle_data_ack(conn, pdu);
4165 rc = iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4169 rc = iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4187 iscsi_pdu_hdr_op_data(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4208 reqh = (struct iscsi_bhs_data_out *)&pdu->bhs;
4215 if (pdu->data_segment_len > SPDK_ISCSI_MAX_RECV_DATA_SEGMENT_LENGTH) {
4216 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4222 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
4228 if (pdu->data_segment_len > task->desired_data_transfer_length) {
4229 SPDK_ERRLOG("the dataout pdu data length is larger than the value sent by R2T PDU\n");
4236 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
4247 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4256 task->current_r2t_length += pdu->data_segment_len;
4257 task->next_expected_r2t_offset += pdu->data_segment_len;
4292 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4293 } else if (spdk_unlikely(spdk_scsi_lun_get_dif_ctx(lun_dev, &task->scsi, &pdu->dif_ctx))) {
4294 pdu->dif_insert_or_strip = true;
4299 if (!pdu->dif_insert_or_strip) {
4304 pdu->data_buf_len = spdk_min(current_desired_data_transfer_length,
4309 pdu->mobj[0] = mobj;
4310 pdu->data = (void *)((uint64_t)mobj->buf + mobj->data_len);
4311 pdu->data_from_mempool = true;
4312 pdu->data_buf_len = SPDK_BDEV_BUF_SIZE_WITH_MD(iscsi_get_mobj_max_data_len(mobj));
4321 iscsi_pdu_payload_op_data(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4330 reqh = (struct iscsi_bhs_data_out *)&pdu->bhs;
4337 return iscsi_reject(conn, pdu, ISCSI_REASON_INVALID_PDU_FIELD);
4343 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4351 mobj = pdu->mobj[0];
4355 pdu->dif_insert_or_strip) {
4356 rc = iscsi_submit_write_subtask(conn, task, pdu, mobj);
4361 assert(pdu->mobj[1] == NULL);
4363 pdu->mobj[0] = NULL;
4367 mobj = pdu->mobj[1];
4372 assert(pdu->dif_insert_or_strip == false);
4376 return iscsi_submit_write_subtask(conn, task, pdu, mobj);
4379 pdu->mobj[1] = NULL;
4385 init_login_reject_response(struct spdk_iscsi_pdu *pdu, struct spdk_iscsi_pdu *rsp_pdu)
4396 rsph->itt = pdu->bhs.itt;
4400 iscsi_pdu_dump(struct spdk_iscsi_pdu *pdu)
4402 spdk_log_dump(stderr, "PDU", (uint8_t *)&pdu->bhs, ISCSI_BHS_LEN);
4405 /* This function is used to refree the pdu when it is acknowledged */
4409 struct spdk_iscsi_pdu *pdu, *pdu_temp;
4413 TAILQ_FOREACH_SAFE(pdu, &conn->snack_pdu_list, tailq, pdu_temp) {
4414 stat_sn = from_be32(&pdu->bhs.stat_sn);
4416 TAILQ_REMOVE(&conn->snack_pdu_list, pdu, tailq);
4417 iscsi_conn_free_pdu(conn, pdu);
4423 iscsi_update_cmdsn(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4437 opcode = pdu->bhs.opcode;
4438 reqh = (struct iscsi_bhs_scsi_req *)&pdu->bhs;
4440 pdu->cmd_sn = from_be32(&reqh->cmd_sn);
4444 if (spdk_sn32_lt(pdu->cmd_sn, sess->ExpCmdSN) ||
4445 spdk_sn32_gt(pdu->cmd_sn, sess->MaxCmdSN)) {
4449 pdu->cmd_sn, sess->ExpCmdSN, sess->MaxCmdSN);
4458 } else if (pdu->cmd_sn != sess->ExpCmdSN) {
4459 SPDK_ERRLOG("CmdSN(%u) error ExpCmdSN=%u\n", pdu->cmd_sn, sess->ExpCmdSN);
4491 iscsi_pdu_hdr_handle(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4497 if (pdu == NULL) {
4501 opcode = pdu->bhs.opcode;
4506 return iscsi_pdu_hdr_op_login(conn, pdu);
4517 init_login_reject_response(pdu, rsp_pdu);
4523 iscsi_pdu_dump(pdu);
4527 rc = iscsi_update_cmdsn(conn, pdu);
4534 rc = iscsi_pdu_hdr_op_nopout(conn, pdu);
4538 rc = iscsi_pdu_hdr_op_scsi(conn, pdu);
4541 rc = iscsi_pdu_hdr_op_task(conn, pdu);
4545 rc = iscsi_pdu_hdr_op_text(conn, pdu);
4549 rc = iscsi_pdu_hdr_op_logout(conn, pdu);
4553 rc = iscsi_pdu_hdr_op_data(conn, pdu);
4557 rc = iscsi_pdu_hdr_op_snack(conn, pdu);
4562 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4576 iscsi_pdu_payload_handle(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4581 opcode = pdu->bhs.opcode;
4587 rc = iscsi_pdu_payload_op_login(conn, pdu);
4590 rc = iscsi_pdu_payload_op_nopout(conn, pdu);
4593 rc = iscsi_pdu_payload_op_scsi(conn, pdu);
4598 rc = iscsi_pdu_payload_op_text(conn, pdu);
4603 rc = iscsi_pdu_payload_op_data(conn, pdu);
4609 return iscsi_reject(conn, pdu, ISCSI_REASON_PROTOCOL_ERROR);
4626 iscsi_pdu_payload_read(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
4636 data_len = pdu->data_segment_len;
4637 read_len = data_len - pdu->data_valid_bytes;
4638 data_buf_len = pdu->data_buf_len;
4640 mobj = pdu->mobj[0];
4658 pdu->data_buf_len = data_buf_len;
4660 pdu->mobj[0] = mobj;
4661 pdu->data = mobj->buf;
4662 pdu->data_from_mempool = true;
4664 mobj = pdu->mobj[1];
4669 assert(pdu->data_from_mempool == true);
4670 assert(!pdu->dif_insert_or_strip);
4673 iscsi_pdu_calc_partial_data_digest(pdu);
4679 pdu->mobj[1] = mobj;
4680 pdu->data = mobj->buf;
4681 pdu->data_offset = pdu->data_valid_bytes;
4682 pdu->data_buf_len = SPDK_BDEV_BUF_SIZE_WITH_MD(SPDK_ISCSI_MAX_RECV_DATA_SEGMENT_LENGTH);
4691 pdu,
4692 pdu->data_valid_bytes - pdu->data_offset,
4699 pdu->data_valid_bytes += rc;
4700 if (pdu->data_valid_bytes < data_len) {
4707 pdu->ddigest_valid_bytes < ISCSI_DIGEST_LEN) {
4709 ISCSI_DIGEST_LEN - pdu->ddigest_valid_bytes,
4710 pdu->data_digest + pdu->ddigest_valid_bytes);
4715 pdu->ddigest_valid_bytes += rc;
4716 if (pdu->ddigest_valid_bytes < ISCSI_DIGEST_LEN) {
4723 iscsi_pdu_calc_partial_data_digest(pdu);
4724 crc32c = iscsi_pdu_calc_partial_data_digest_done(pdu);
4726 rc = MATCH_DIGEST_WORD(pdu->data_digest, crc32c);
4740 struct spdk_iscsi_pdu *pdu;
4747 pdu = conn->pdu_in_progress;
4760 if (pdu->bhs_valid_bytes < ISCSI_BHS_LEN) {
4762 ISCSI_BHS_LEN - pdu->bhs_valid_bytes,
4763 (uint8_t *)&pdu->bhs + pdu->bhs_valid_bytes);
4768 pdu->bhs_valid_bytes += rc;
4769 if (pdu->bhs_valid_bytes < ISCSI_BHS_LEN) {
4780 SPDK_DEBUGLOG(iscsi, "pdu received after logout\n");
4785 pdu->data_segment_len = ISCSI_ALIGN(DGET24(pdu->bhs.data_segment_len));
4786 pdu->data_buf_len = pdu->data_segment_len;
4789 ahs_len = pdu->bhs.total_ahs_len * 4;
4791 SPDK_DEBUGLOG(iscsi, "pdu ahs length %d is invalid\n", ahs_len);
4796 if (pdu->ahs_valid_bytes < ahs_len) {
4798 ahs_len - pdu->ahs_valid_bytes,
4799 pdu->ahs + pdu->ahs_valid_bytes);
4805 pdu->ahs_valid_bytes += rc;
4806 if (pdu->ahs_valid_bytes < ahs_len) {
4813 pdu->hdigest_valid_bytes < ISCSI_DIGEST_LEN) {
4815 ISCSI_DIGEST_LEN - pdu->hdigest_valid_bytes,
4816 pdu->header_digest + pdu->hdigest_valid_bytes);
4822 pdu->hdigest_valid_bytes += rc;
4823 if (pdu->hdigest_valid_bytes < ISCSI_DIGEST_LEN) {
4829 crc32c = iscsi_pdu_calc_header_digest(pdu);
4830 rc = MATCH_DIGEST_WORD(pdu->header_digest, crc32c);
4838 rc = iscsi_pdu_hdr_handle(conn, pdu);
4848 if (pdu->data_segment_len != 0) {
4849 rc = iscsi_pdu_payload_read(conn, pdu);
4859 spdk_trace_record(TRACE_ISCSI_READ_PDU, conn->trace_id, pdu->data_valid_bytes,
4860 (uintptr_t)pdu, pdu->bhs.opcode);
4862 if (!pdu->is_rejected) {
4863 rc = iscsi_pdu_payload_handle(conn, pdu);
4868 spdk_trace_record(TRACE_ISCSI_TASK_EXECUTED, conn->trace_id, 0, (uintptr_t)pdu);
4869 iscsi_put_pdu(pdu);