From 03a52d0d32e6fcd86bb4776a52148add0f64eb51 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Mon, 11 Jun 2018 13:20:23 +0900 Subject: [PATCH] iscsi: Factor out copy scsi status when it is not good Change-Id: I5042df8c25a2d2f6591a2a922e22407904b04bab Signed-off-by: Shuhei Matsumoto Reviewed-on: https://review.gerrithub.io/414561 Tested-by: SPDK Automated Test System Reviewed-by: Dariusz Stojaczyk Reviewed-by: Daniel Verkamp Reviewed-by: Jim Harris --- include/spdk/scsi.h | 1 + lib/iscsi/conn.c | 10 ++-------- lib/scsi/task.c | 9 +++++++++ test/unit/lib/iscsi/conn.c/conn_ut.c | 6 ++++++ 4 files changed, 18 insertions(+), 8 deletions(-) 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) {