On Wed, 2017-02-22 at 17:07 +0100, Hannes Reinecke wrote:
> Primary goal is to make asynchronous aborts mandatory; there hasn't
> been a single report so far where asynchronous abort won't work, so
> the 'no_async_abort' flag has never been used and will be removed
> with this patchset.

Hello Hannes,

There is a problem with asynchronous aborts. Some SCSI drivers, e.g. ib_srp,
support fast error recovery by performing a transport layer reconnect without
reporting this event as a failure to the SCSI core. While such a reconnect is
ongoing it is important that no attempt is made to use the data structures
that represent the connection. Hence theĀ scsi_target_block() call in
srp_reconnect_rport(). This blocks most .queuecommand() calls except those
that originate from the SCSI EH. Hence the if (current == shost->ehandler)
mutex_lock(&rport->mutex) code in srp_queuecommand(). Asynchronous aborts
break this code because the asynchronous abort code submits an abort from
another context than the SCSI EH thread. I know that this way of detecting
the SCSI EH context is not an optimal solution. A few years ago I have tried
to modify the SCSI EH such that reconnects and .queuecommand() calls could
be serialized but James was not interested in such patches at that time.

Bart.

Reply via email to