On 08/28/2014 02:31 PM, Martin Peschke wrote:
On Thu, 2014-08-28 at 14:04 +0200, Hannes Reinecke wrote:
On 08/25/2014 01:15 PM, Paolo Bonzini wrote:
- abort the command, and then the driver should never call the
->scsi_done callback for the Scsi_Cmnd*.
In practice we rely on the latter behaviour; when ->scsi_done is
called while the command is under eh_abort _really bad things_
will happen.
As soon as eh_abort is called control is transferred back to the
SCSI midlayer, so any LLDD should never send completions for these
commands back to the midlayer.
Mmh, then there is a small race window starting at the point in time
when the abort function of an LLDD is called up to the point in time
when that abort function has taken the necessary measures to make sure
that scsi_done won't be called for a racing command completion , isn't
it?
No, that's fine. The timeout function is under control of the block
layer, which sets an atomic flag on the request before calling the
timeout function.
And ->scsi_done() essentially just calls 'blk_complete_request();, which
checks the very same flag before raising the block soft irq.
Cheers,
Hannes
--
Dr. Hannes Reinecke zSeries & Storage
hare@xxxxxxx +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)
--
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