diff --git a/include/spdk/scsi.h b/include/spdk/scsi.h index 5172d9e67..530200cda 100644 --- a/include/spdk/scsi.h +++ b/include/spdk/scsi.h @@ -221,6 +221,7 @@ void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int as int ascq); void spdk_scsi_task_set_status(struct spdk_scsi_task *task, int sc, int sk, int asc, int ascq); +void spdk_scsi_task_copy_status(struct spdk_scsi_task *dst, struct spdk_scsi_task *src); void spdk_scsi_task_process_null_lun(struct spdk_scsi_task *task); #ifdef __cplusplus diff --git a/lib/iscsi/conn.c b/lib/iscsi/conn.c index 2286c5b0d..64997d2ae 100644 --- a/lib/iscsi/conn.c +++ b/lib/iscsi/conn.c @@ -792,10 +792,7 @@ process_read_task_completion(struct spdk_iscsi_conn *conn, if (task->scsi.status != SPDK_SCSI_STATUS_GOOD) { TAILQ_FOREACH(tmp, &primary->subtask_list, subtask_link) { - memcpy(tmp->scsi.sense_data, task->scsi.sense_data, - task->scsi.sense_data_len); - tmp->scsi.sense_data_len = task->scsi.sense_data_len; - tmp->scsi.status = task->scsi.status; + spdk_scsi_task_copy_status(&tmp->scsi, &task->scsi); } } @@ -843,10 +840,7 @@ spdk_iscsi_task_cpl(struct spdk_scsi_task *scsi_task) primary->bytes_completed += task->scsi.length; if ((task != primary) && (task->scsi.status != SPDK_SCSI_STATUS_GOOD)) { - memcpy(primary->scsi.sense_data, task->scsi.sense_data, - task->scsi.sense_data_len); - primary->scsi.sense_data_len = task->scsi.sense_data_len; - primary->scsi.status = task->scsi.status; + spdk_scsi_task_copy_status(&primary->scsi, &task->scsi); } if (primary->bytes_completed == primary->scsi.transfer_len) { diff --git a/lib/scsi/task.c b/lib/scsi/task.c index b192da6ed..6ddc00858 100644 --- a/lib/scsi/task.c +++ b/lib/scsi/task.c @@ -245,3 +245,12 @@ spdk_scsi_task_set_status(struct spdk_scsi_task *task, int sc, int sk, } task->status = sc; } + +void +spdk_scsi_task_copy_status(struct spdk_scsi_task *dst, + struct spdk_scsi_task *src) +{ + memcpy(dst->sense_data, src->sense_data, src->sense_data_len); + dst->sense_data_len = src->sense_data_len; + dst->status = src->status; +} diff --git a/test/unit/lib/iscsi/conn.c/conn_ut.c b/test/unit/lib/iscsi/conn.c/conn_ut.c index 988376abc..04244f509 100644 --- a/test/unit/lib/iscsi/conn.c/conn_ut.c +++ b/test/unit/lib/iscsi/conn.c/conn_ut.c @@ -174,6 +174,12 @@ spdk_scsi_port_get_name(const struct spdk_scsi_port *port) return NULL; } +void +spdk_scsi_task_copy_status(struct spdk_scsi_task *dst, + struct spdk_scsi_task *src) +{ +} + void spdk_put_pdu(struct spdk_iscsi_pdu *pdu) {