iscsi: Factor out copy scsi status when it is not good

Change-Id: I5042df8c25a2d2f6591a2a922e22407904b04bab
Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-on: https://review.gerrithub.io/414561
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Dariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2018-06-11 13:20:23 +09:00 committed by Jim Harris
parent d817d6a766
commit 03a52d0d32
4 changed files with 18 additions and 8 deletions

View File

@ -221,6 +221,7 @@ void spdk_scsi_task_build_sense_data(struct spdk_scsi_task *task, int sk, int as
int ascq); int ascq);
void spdk_scsi_task_set_status(struct spdk_scsi_task *task, int sc, int sk, int asc, void spdk_scsi_task_set_status(struct spdk_scsi_task *task, int sc, int sk, int asc,
int ascq); 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); void spdk_scsi_task_process_null_lun(struct spdk_scsi_task *task);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -792,10 +792,7 @@ process_read_task_completion(struct spdk_iscsi_conn *conn,
if (task->scsi.status != SPDK_SCSI_STATUS_GOOD) { if (task->scsi.status != SPDK_SCSI_STATUS_GOOD) {
TAILQ_FOREACH(tmp, &primary->subtask_list, subtask_link) { TAILQ_FOREACH(tmp, &primary->subtask_list, subtask_link) {
memcpy(tmp->scsi.sense_data, task->scsi.sense_data, spdk_scsi_task_copy_status(&tmp->scsi, &task->scsi);
task->scsi.sense_data_len);
tmp->scsi.sense_data_len = task->scsi.sense_data_len;
tmp->scsi.status = task->scsi.status;
} }
} }
@ -843,10 +840,7 @@ spdk_iscsi_task_cpl(struct spdk_scsi_task *scsi_task)
primary->bytes_completed += task->scsi.length; primary->bytes_completed += task->scsi.length;
if ((task != primary) && if ((task != primary) &&
(task->scsi.status != SPDK_SCSI_STATUS_GOOD)) { (task->scsi.status != SPDK_SCSI_STATUS_GOOD)) {
memcpy(primary->scsi.sense_data, task->scsi.sense_data, spdk_scsi_task_copy_status(&primary->scsi, &task->scsi);
task->scsi.sense_data_len);
primary->scsi.sense_data_len = task->scsi.sense_data_len;
primary->scsi.status = task->scsi.status;
} }
if (primary->bytes_completed == primary->scsi.transfer_len) { if (primary->bytes_completed == primary->scsi.transfer_len) {

View File

@ -245,3 +245,12 @@ spdk_scsi_task_set_status(struct spdk_scsi_task *task, int sc, int sk,
} }
task->status = sc; 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;
}

View File

@ -174,6 +174,12 @@ spdk_scsi_port_get_name(const struct spdk_scsi_port *port)
return NULL; return NULL;
} }
void
spdk_scsi_task_copy_status(struct spdk_scsi_task *dst,
struct spdk_scsi_task *src)
{
}
void void
spdk_put_pdu(struct spdk_iscsi_pdu *pdu) spdk_put_pdu(struct spdk_iscsi_pdu *pdu)
{ {