I don't think so. If you run crypto in async mode, you get asynchronous
callback (kcryptd_asynnc_done() here).
AFAIK this callback is called in interrupt context. This callback
decreases pending counter and if it reach zero it calls
kcryptd_crypt_write_io_submit() -> kcryptd_queue_io().
You cannot call direct encryption if it is called from async callback,
so the IO must be always queued to IO workqueue for later.
So the in_interrupt() is IMHO equivalent of async flag and it is
properly placed there.
But previously, there were threads per device, so if one IO thread blocks,
others stacked mappings can continue
Now I see possibility for deadlock there because we have one io thread now
(assuming that 1 CPU situation Alasdair mentioned).
Or is there a mistake in my analysis?
Nope, one singlethread per crypt device (resp. two: io + crypt).
Milan
--