On Fri, 19 Jun 2020, Mike Snitzer wrote: > On Fri, Jun 19 2020 at 12:41pm -0400, > Ignat Korchagin <ignat@xxxxxxxxxxxxxx> wrote: > > > This is a follow up from the long-forgotten [1], but with some more convincing > > evidence. Consider the following script: > > > > [1]: https://www.spinics.net/lists/dm-crypt/msg07516.html > > [2]: https://blog.cloudflare.com/speeding-up-linux-disk-encryption/ > > > > Ignat Korchagin (1): > > Add DM_CRYPT_FORCE_INLINE flag to dm-crypt target > > > > drivers/md/dm-crypt.c | 55 +++++++++++++++++++++++++++++++++---------- > > 1 file changed, 43 insertions(+), 12 deletions(-) > > > > -- > > 2.20.1 > > > > Hi, > > I saw [2] and have been expecting something from cloudflare ever since. > Nice to see this submission. > > There is useful context in your 0th patch header. I'll likely merge > parts of this patch header with the more terse 1/1 header (reality is > there only needed to be a single patch submission). > > Will review and stage accordingly if all looks fine to me. Mikulas, > please have a look too. > > Thanks, > Mike + if (test_bit(DM_CRYPT_FORCE_INLINE, &cc->flags)) { + if (in_irq()) { + /* Crypto API will fail hard in hard IRQ context */ + tasklet_init(&io->tasklet, kcryptd_crypt_tasklet, (unsigned long)&io->work); + tasklet_schedule(&io->tasklet); + } else + kcryptd_crypt(&io->work); + } else { + INIT_WORK(&io->work, kcryptd_crypt); + queue_work(cc->crypt_queue, &io->work); + } I'm looking at this and I'd like to know why does the crypto API fail in hard-irq context and why does it work in tasklet context. What's the exact reason behind this? Mikulas -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel