# This is a BitKeeper generated diff -Nru style patch. # # ChangeSet # 2004/08/18 01:28:59-04:00 jgarzik@pobox.com # [libata] fix error recovery reference count and in-recovery flag # # This bug could potentially lead to soft hangs (processes stuck in D # state) if an error occurred. # # Yet another undocumented nuance of the ->eh_strategy_handler. # # Thanks to excellent detective work by Brad Campbell tracking this down. # Thanks also to Doug Ledford. # # drivers/scsi/libata-scsi.c # 2004/08/18 01:28:57-04:00 jgarzik@pobox.com +8 -0 # [libata] fix error recovery reference count and in-recovery flag # # This bug could potentially lead to soft hangs (processes stuck in D # state) if an error occurred. # # Yet another undocumented nuance of the ->eh_strategy_handler. # # Thanks to excellent detective work by Brad Campbell tracking this down. # Thanks also to Doug Ledford. # diff -Nru a/drivers/scsi/libata-scsi.c b/drivers/scsi/libata-scsi.c --- a/drivers/scsi/libata-scsi.c 2004-08-19 13:47:25 -07:00 +++ b/drivers/scsi/libata-scsi.c 2004-08-19 13:47:25 -07:00 @@ -214,6 +214,14 @@ ap = (struct ata_port *) &host->hostdata[0]; ap->ops->eng_timeout(ap); + host->in_recovery = 0; + + /* TODO: this is per-command; when queueing is supported + * this code will either change or move to a more + * appropriate place + */ + host->host_failed--; + DPRINTK("EXIT\n"); return 0; }