On 11/2/22 20:12, Hannes Reinecke wrote:So, having had an entire weekend pondering this issue why don't we allocate an _additional_ set of requests?
On 11/2/22 11:07, Damien Le Moal wrote:
On 11/2/22 18:52, John Garry wrote:[ .. ] >> So we only need to find a way of 're-using' that tag, then we won't have
Hi Damien,
to set aside a reserved tag and everything would be dandy...
I tried that. It is very ugly... Problem is that integration with EH in
case a real NCQ error happens when all that read-log-complete dance is
happening is hard. And don't get me started with the need to save/restore
the scsi command context of the command we are reusing the tag from.
And given that the code is changing to use regular submission path for
internal commands, right now, we need a reserved tag. Or a way to "borrow"
the tag from a request that we need to check. Which means we need some
additional api to not always try to allocate a tag.
Maybe we can stop processing when we receive an error (should be doing
that anyway as otherwise the log might be overwritten), then we should
be having a pretty good chance of getting that tag.
Hmmm.... that would be no better than using EH which does stop processing
until the internal house keeping is done.
Or, precisely, getting _any_ tag as at least one tag is free at that point.
Hmm?
See above. Not free, but usable as far as the device is concerned since we
have at least on command we need to check completed at the device level
(but not yet completed from scsi/block layer point of view).