James Bottomley wrote: > On Wed, 2005-12-07 at 15:56 -0600, Michael Reed wrote: >> During my testing of fc transport attributes for the mpt fusion >> driver, I came upon this OOPS. (Actually, I've come upon it >> too many times. :( ) >> >> Attached is a patch which addresses the issue. Please give it a look. > > Isn't a better patch simply to copy the eh_action and check it for null > before completing it? That will close the done after timeout race. > > James > > OK. Try this. (I did!) Mike
--- a/drivers/scsi/scsi_error.c 2005-12-07 19:14:44.000000000 -0800 +++ b/drivers/scsi/scsi_error.c 2005-12-07 19:13:24.734716721 -0800 @@ -422,10 +422,15 @@ **/ static void scsi_eh_done(struct scsi_cmnd *scmd) { + struct completion *eh_action; + SCSI_LOG_ERROR_RECOVERY(3, printk("%s scmd: %p result: %x\n", __FUNCTION__, scmd, scmd->result)); - complete(scmd->device->host->eh_action); + + eh_action = scmd->device->host->eh_action; + if (eh_action) + complete(eh_action); } /**