Hi, On 3/7/2023 3:31 AM, Mike Snitzer wrote: > On Mon, Mar 06 2023 at 8:49P -0500, > Hou Tao <houtao@xxxxxxxxxxxxxxx> wrote: > >> From: Hou Tao <houtao1@xxxxxxxxxx> >> >> When neither no_read_workqueue nor no_write_workqueue are enabled, >> tasklet_trylock() in crypt_dec_pending() may still return false due to >> an uninitialized state, and dm-crypt will do io completion in io_queue >> instead of current context unnecessarily. > Have you actually experienced this? Yes. I had written a bpftrace script to check the completion context of blkdev_bio_end_io_simple() when doing direct io read on dm-crypt device. The expected context should be unbound workers of crypt_queue, but sometimes the context is the bound worker of io_queue. > >> Fix it by initializing io->tasklet in crypt_io_init(). > Really would rather avoid always calling tasklet_init(). But I can > optimize it away with a later patch. My first though was "io->tasklet.state = 0", but it may be fragile because it operated on the internal status of tasklet, so I switch to tasklet_init(). > > Mike -- dm-devel mailing list dm-devel@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/dm-devel