Re: 2.5.63/64 do not boot: loop in scsi_error

James Bottomley
2003-03-06T17:12:07Z

On Thu, 2003-03-06 at 11:15, Zwane Mwaikambo wrote:
> On Thu, 6 Mar 2003, James Bottomley wrote:
>
> > This log implies the error handling finished after the BDR. That looks
> > like the system doesn't have Mike's latest patch for the logic reversal
> > problem in scsi_eh_ready_devs, could you check this?
>
> static void scsi_eh_ready_devs(struct Scsi_Host *shost,
> struct list_head *work_q,
> struct list_head *done_q)
> {
> if (scsi_eh_bus_device_reset(shost, work_q, done_q))
> if (scsi_eh_bus_reset(shost, work_q, done_q))
> if (scsi_eh_host_reset(work_q, done_q))
> scsi_eh_offline_sdevs(work_q, done_q);
> }
>
> That is what i currently have, i'll try a boot with;
>
> - if (scsi_eh_bus_reset(shost, work_q, done_q))
> + if (!scsi_eh_bus_reset(shost, work_q, done_q))
>
> Thanks,
> Zwane

Actually, all three if's need nots in front:

diff -Nru a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
--- a/drivers/scsi/scsi_error.c Thu Mar 6 11:21:22 2003
+++ b/drivers/scsi/scsi_error.c Thu Mar 6 11:21:22 2003
@@ -1490,9 +1490,9 @@
struct list_head *work_q,
struct list_head *done_q)
{
- if (scsi_eh_bus_device_reset(shost, work_q, done_q))
- if (scsi_eh_bus_reset(shost, work_q, done_q))
- if (scsi_eh_host_reset(work_q, done_q))
+ if (!scsi_eh_bus_device_reset(shost, work_q, done_q))
+ if (!scsi_eh_bus_reset(shost, work_q, done_q))
+ if (!scsi_eh_host_reset(work_q, done_q))
scsi_eh_offline_sdevs(work_q, done_q);
}