Messages in this thread | | | From | "Manfred Spraul" <> | Subject | Re: Oops while booting | Date | Sat, 9 Jan 1999 14:31:03 +0100 |
| |
I think that the code in scsi_old_done() is still not correct: as far as I see, the 3rd call to scsi_reset(SYNC) assumes that scsi_old_done() is called from ncr53c8xx_reset():
-- scsi_obsolete, lines 613ff printk("scsi%d channel %d : resetting for second half of retries.\n", SCpnt->host->host_no, SCpnt->channel); scsi_reset(SCpnt, SCSI_RESET_SYNCHRONOUS); break; // <<<<<<<< this will leave the function without REDO // I think you should remove this break so that the // code falls-through to REDO. } } --------------
Gerard wrote: > It seems that numerous scsi low-level >drivers still use the old scsi code and so may be affected by the problem. >If the scsi_obsolete stuff is the culprit, then we probably should try >fixing it instead of still bloating low-level drivers.
I think that Gerard is right: Many scsi drivers use the old error handling (~ 8 old, 6 new), and I'm sure that many of them will cause an Oops during scsi_reset. I think that you should add a protection that disables scsi_old_done() during scsi_reset(SYNC). At least you should add a printk() that helps to find the problem.
e.g. add a new flag to SCpnt->flags: "DISABLE_DONE" or "DONE_COMPATIBILITY_MODE" set this flag before scsi_reset(SYNC). reset this flag after scsi_reset(SYNC). ignore all call to scsi_old_done() if the flag is set. (or printk(..))
if(SCpnt->flags & DISABLE_DONE) { printk(KERN_??? "Illegal scsi_old_done() call from driver %s", SCpnt->host->hostt->name); return; }
Regards, Manfred
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |