On 06/11/13 20:57, James Bottomley wrote:
Actually, I think we can dump the workqueue altogether. The only reason we need it is because the current abort handlers wait for the command and return the completion state. However, all LLDs are capable of emitting TMFs at interrupt level, so if we separated the emit from the wait, we could simply do this sequence: on timeout, fire the abort from interrupt and mark the command as having an abort issued (possibly by adding a pointer to the abort task), return BLK_EH_RESET_TIMER. Now if the timeout fires again, assume the abort was unsuccessful and escalate to LUN reset. This is fully asynchronous, fully tracked and doesn't rely on work queues. The necessary additions for something like this are the from interrupt issue abort and LUN reset, which could just be additional callbacks in the host template.
Do we really need a new callback in the host template for a command abort that does not wait ? Several LLDs already have their own internal data structures for keeping track of the request state and can use these data structures to set a flag "command has been aborted". If aborting a command fails and the command completes that flag can then be used to avoid a second invocation of scsi_done(). At least, that's what the SRP initiator already does today in srp_abort().
Bart. -- To unsubscribe from this list: 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