>-----Original Message----- >From: James Bottomley [mailto:James.Bottomley@xxxxxxx] >Sent: Tuesday, October 26, 2010 1:27 AM >To: Vikas Chaudhary >Cc: Mike Christie; linux-scsi@xxxxxxxxxxxxxxx; Nilesh Javali; Ravi Anand >Subject: RE: [PATCH 06/15] qla4xxx: Do not wait for the outstanding >commands to complete > >On Mon, 2010-10-11 at 02:24 -0700, Vikas Chaudhary wrote: >> >-----Original Message----- >> >From: Mike Christie [mailto:michaelc@xxxxxxxxxxx] >> >Sent: Friday, October 08, 2010 8:16 AM >> >To: Vikas Chaudhary >> >Cc: James.Bottomley@xxxxxxx; linux-scsi@xxxxxxxxxxxxxxx; Nilesh Javali; >> >Ravi Anand >> >Subject: Re: [PATCH 06/15] qla4xxx: Do not wait for the outstanding >> >commands to complete >> > >> >On 10/07/2010 12:49 AM, Vikas Chaudhary wrote: >> >> From: Nilesh Javali<nilesh.javali@xxxxxxxxxx> >> >> >> >> Do not wait for the outstanding commands to complete in case of >> >> firmware hang. >> >> >> >> Signed-off-by: Nilesh Javali<nilesh.javali@xxxxxxxxxx> >> >> Signed-off-by: Vikas Chaudhary<vikas.chaudhary@xxxxxxxxxx> >> >> Signed-off-by: Ravi Anand<ravi.anand@xxxxxxxxxx> >> >> --- >> >> drivers/scsi/qla4xxx/ql4_os.c | 6 ++++-- >> >> 1 files changed, 4 insertions(+), 2 deletions(-) >> >> >> >> diff --git a/drivers/scsi/qla4xxx/ql4_os.c >> >> b/drivers/scsi/qla4xxx/ql4_os.c index 56962e5..a6455fb 100644 >> >> --- a/drivers/scsi/qla4xxx/ql4_os.c >> >> +++ b/drivers/scsi/qla4xxx/ql4_os.c >> >> @@ -1102,7 +1102,8 @@ static int qla4xxx_recover_adapter(struct >> >scsi_qla_host *ha) >> >> ha->host_no, __func__)); >> >> status = ha->isp_ops->reset_firmware(ha); >> >> if (status == QLA_SUCCESS) { >> >> - qla4xxx_cmd_wait(ha); >> >> + if (!test_bit(AF_FW_RECOVERY,&ha->flags)) >> >> + qla4xxx_cmd_wait(ha); >> >> ha->isp_ops->disable_intrs(ha); >> >> qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); >> >> qla4xxx_abort_active_cmds(ha, DID_RESET<< 16); @@ >- >> >1119,7 >> >> +1120,8 @@ static int qla4xxx_recover_adapter(struct scsi_qla_host >*ha) >> >> * or if stop_firmware fails for ISP-82xx. >> >> * This is the default case for ISP-4xxx */ >> >> if (!is_qla8022(ha) || reset_chip) { >> >> - qla4xxx_cmd_wait(ha); >> >> + if (!test_bit(AF_FW_RECOVERY,&ha->flags)) >> >> + qla4xxx_cmd_wait(ha); >> >> qla4xxx_process_aen(ha, FLUSH_DDB_CHANGED_AENS); >> >> qla4xxx_abort_active_cmds(ha, DID_RESET<< 16); >> >> DEBUG2(ql4_printk(KERN_INFO, ha, >> > >> >If we go from qla4xxx_eh_host_reset->qla4xxx_recover_adapter and you do >not >> >wait, is is possible for the driver to be accessing scsi commands after >> >qla4xxx_eh_host_reset returns? If so I think there is a problem where >the >> >scsi eh will fail or retry the cmd so the memory for the scsi command >could >> >be reallocated/freed. >> > >> >> We do not access command after qla4xxx_eh_host_reset returns. >> >> >On a related note, has qla4xxx_eh_host_reset ever returned SUCCESS? I >think >> >there is a problem in qla4xxx_cmd_wait when the scsi eh is running. At >that >> >time blk_finish_request->blk_queue_end_tag is not going to be run, >because >> >if the driver were to call scsi_done the block layer would do >> >blk_complete_request and the blk_mark_rq_complete would fail (this is >> >because the scsi/block eh timeout could has already marked it complete). >> > >> >I think you need the attached patch. >> >> Yes. We need attached patch. I am doing some testing with this patch. >> I will send out this patch for inclusion soon. > >Is there an update on this? It would be nice to include it before the >merge window closes. > I am sending update patch in next email. Thanks, Vikas. ÿô.nÇ·®+%˱é¥wÿº{.nÇ·¥{±þÇø¡Ü}©²ÆzÚj:+v¨þø®w¥þàÞ¨è&¢)ß«a¶Úÿûz¹ÞúÝjÿwèf