* ATAPI corruption found @ 2005-10-05 10:05 Jeff Garzik 2005-10-06 6:12 ` Tejun Heo 0 siblings, 1 reply; 4+ messages in thread From: Jeff Garzik @ 2005-10-05 10:05 UTC (permalink / raw) To: linux-ide@vger.kernel.org When atapi_qc_complete() takes the error path, completes the SCSI command, SCSI EH runs, and the code attempts to complete the SCSI command again, this time with scsi_finish_command(). Ideally what we should be doing is simply not completing the SCSI command until REQUEST SENSE is complete, more accurately simulating autosense. I should have a fix in the next day or so, unless somebody beats me to it. Jeff ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ATAPI corruption found 2005-10-05 10:05 ATAPI corruption found Jeff Garzik @ 2005-10-06 6:12 ` Tejun Heo 2005-10-06 9:56 ` Jeff Garzik 0 siblings, 1 reply; 4+ messages in thread From: Tejun Heo @ 2005-10-06 6:12 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org Hi, Jeff. Jeff Garzik wrote: > > When atapi_qc_complete() takes the error path, completes the SCSI > command, SCSI EH runs, and the code attempts to complete the SCSI > command again, this time with scsi_finish_command(). Umm.. that's how it worked until now by design. Can you elaborate how corruption occurs? > > Ideally what we should be doing is simply not completing the SCSI > command until REQUEST SENSE is complete, more accurately simulating > autosense. > > I should have a fix in the next day or so, unless somebody beats me to it. Hehheh, nobody beat you. :-) -- tejun ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ATAPI corruption found 2005-10-06 6:12 ` Tejun Heo @ 2005-10-06 9:56 ` Jeff Garzik 2005-10-06 14:33 ` Tejun Heo 0 siblings, 1 reply; 4+ messages in thread From: Jeff Garzik @ 2005-10-06 9:56 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide@vger.kernel.org Tejun Heo wrote: > > Hi, Jeff. > > Jeff Garzik wrote: > >> >> When atapi_qc_complete() takes the error path, completes the SCSI >> command, SCSI EH runs, and the code attempts to complete the SCSI >> command again, this time with scsi_finish_command(). > > > Umm.. that's how it worked until now by design. Can you elaborate how > corruption occurs? It completes the SCSI command twice. Once in atapi_qc_complete(), and once in ata_qc_timeout(). And I doubt it has ever -really- worked as hoped... Jeff ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: ATAPI corruption found 2005-10-06 9:56 ` Jeff Garzik @ 2005-10-06 14:33 ` Tejun Heo 0 siblings, 0 replies; 4+ messages in thread From: Tejun Heo @ 2005-10-06 14:33 UTC (permalink / raw) To: Jeff Garzik; +Cc: linux-ide@vger.kernel.org, Albert Lee Hello, Jeff. Jeff Garzik wrote: > Tejun Heo wrote: > >> >> Hi, Jeff. >> >> Jeff Garzik wrote: >> >>> >>> When atapi_qc_complete() takes the error path, completes the SCSI >>> command, SCSI EH runs, and the code attempts to complete the SCSI >>> command again, this time with scsi_finish_command(). >> >> >> >> Umm.. that's how it worked until now by design. Can you elaborate >> how corruption occurs? > > > It completes the SCSI command twice. Once in atapi_qc_complete(), and > once in ata_qc_timeout(). I hope I'm not completely misunderstanding what you're saying. If so, please be kind enough to point out. When a SCSI LLDD reports failure of a command to midlayer, several actions can be taken. scsi_decide_disposition() determines what to do depending on which result code LLDD reports and what content the sense buffer contains. Some commands are just reported upward (scsi_finish_command), some retried and other are passed on to EH for further recovery action. When a scmd is handed off to EH, - it isn't finished yet. - it will be finished or retried by calling either scsi_finish_command() or scsi_queue_insert(). So, when EH is needed, SCSI ML passes the scmd to EH without finishing it and EH is responsible of what to do with the scmd. This is exactly what's going on w/ ATAPI request sensing. libata asks SCSI ML to invoke EH for the scmd by completing a scmd with CHECK_SENSE but without sense data, so SCSI ML invokes EH to read sense data and actually determine what to do. libata EH is invoked and it reads sense data and finishes the scmd with the sense data. AFAIK, this is how SCSI EH works. > And I doubt it has ever -really- worked as hoped... With proper fixes to libata EH, it works. I can definitely tell you that and I think Albert can also verify that ATAPI request sensing works. libata EH currently has some issues with stuff like synchronization with normal processing and etc, but it's nothing fundamental. After all, that's how SCSI EH works. If I'm being stupid here, please point out. I'll hit my head as hard as I can and take a long tearful shower. :-) Thanks. -- tejun ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2005-10-06 14:33 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2005-10-05 10:05 ATAPI corruption found Jeff Garzik 2005-10-06 6:12 ` Tejun Heo 2005-10-06 9:56 ` Jeff Garzik 2005-10-06 14:33 ` Tejun Heo
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).