From ef05fb80c041000cf9dba02db53074cbce33bfb5 Mon Sep 17 00:00:00 2001 From: Andrew Vasquez Date: Mon, 16 Jan 2012 11:52:25 -0800 Subject: [PATCH] qla2xxx: Fix to update proper command completion upon command retries. Pass right completion om processing continuation status IOCB. JIRA Key: V2632FC-149 --- drivers/scsi/qla2xxx/qla_isr.c | 12 +++++++----- drivers/scsi/qla2xxx/qla_os.c | 3 +-- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 7804470ece908..5cad6034979af 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1343,7 +1343,7 @@ qla2x00_process_response_queue(struct rsp_que *rsp) static inline void qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, - uint32_t sense_len, struct rsp_que *rsp) + uint32_t sense_len, struct rsp_que *rsp, int res) { struct scsi_qla_host *vha = sp->fcport->vha; struct scsi_cmnd *cp = GET_CMD_SP(sp); @@ -1365,8 +1365,10 @@ qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t par_sense_len, track_sense_len -= sense_len; SET_CMD_SENSE_LEN(sp, track_sense_len); - if (track_sense_len != 0) + if (track_sense_len != 0) { rsp->status_srb = sp; + cp->result = res; + } if (sense_len) { ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x301c, @@ -1683,7 +1685,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) break; qla2x00_handle_sense(sp, sense_data, par_sense_len, sense_len, - rsp); + rsp, res); break; case CS_DATA_UNDERRUN: @@ -1744,7 +1746,7 @@ check_scsi_status: break; qla2x00_handle_sense(sp, sense_data, par_sense_len, - sense_len, rsp); + sense_len, rsp, res); } break; @@ -1864,7 +1866,7 @@ qla2x00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt) /* Place command on done queue. */ if (sense_len == 0) { rsp->status_srb = NULL; - sp->done(ha, sp, 0); + sp->done(ha, sp, cp->result); } } diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 5cd36bc03892c..50aaf03ccc551 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -612,8 +612,7 @@ qla2x00_sp_compl(void *data, void *ptr, int res) srb_t *sp = (srb_t*)ptr; struct scsi_cmnd *cmd = GET_CMD_SP(sp); - if (res) - cmd->result = res; + cmd->result = res; if (atomic_read(&sp->ref_count) == 0) { ql_dbg(ql_dbg_io, sp->fcport->vha, 0x3015, -- 2.50.1