On 05/27/05 04:36, Jeff Garzik wrote: > Christoph Hellwig wrote: >>No, hav ing the host_lock only held for ->queuecommand which doesn't >>need that locking doesn't make any sense. An API like the current one > > > It makes a lot of sense: LLDs are written with the assumption that > paths called from ->queuecommand will not be interrupted by their own > interrupt handler, whereas error handling paths are typically written > with precisely the -opposite- assumption. > > Removing spin_lock_irq() from queuecommand in SCSI EH causes problems, > and solves nothing. scsi_done() itself needs no explicit locking, it is completely reentrant and this is a good thing. I'd like to see the same thing for queuecommand(), i.e. host_lock be gone. Modern HA and their LLDD, implement completely reentrant queuecommand() and can deliver commands back to SCSI Core, via scsi_done(), _simultaneously_. I.e. no concurrency between queuecommand() and scsi_done() is necessary. This will greatly "free up" design and logic in LLDD to achieve greater throughput. Sleeping in EH is good. Luben - : send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html