• Mikulas Patocka's avatar
    dm-verity: don't use blocking calls from tasklets · 28f07f2a
    Mikulas Patocka authored
    The commit 5721d4e5 enhanced dm-verity, so that it can verify blocks
    from tasklets rather than from workqueues. This reportedly improves
    performance significantly.
    
    However, dm-verity was using the flag CRYPTO_TFM_REQ_MAY_SLEEP from
    tasklets which resulted in warnings about sleeping function being called
    from non-sleeping context.
    
    BUG: sleeping function called from invalid context at crypto/internal.h:206
    in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 14, name: ksoftirqd/0
    preempt_count: 100, expected: 0
    RCU nest depth: 0, expected: 0
    CPU: 0 PID: 14 Comm: ksoftirqd/0 Tainted: G        W 6.7.0-rc1 #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-2 04/01/2014
    Call Trace:
     <TASK>
     dump_stack_lvl+0x32/0x50
     __might_resched+0x110/0x160
     crypto_hash_walk_done+0x54/0xb0
     shash_ahash_update+0x51/0x60
     verity_hash_update.isra.0+0x4a/0x130 [dm_verity]
     verity_verify_io+0x165/0x550 [dm_verity]
     ? free_unref_page+0xdf/0x170
     ? psi_group_change+0x113/0x390
     verity_tasklet+0xd/0x70 [dm_verity]
     tasklet_action_common.isra.0+0xb3/0xc0
     __do_softirq+0xaf/0x1ec
     ? smpboot_thread_fn+0x1d/0x200
     ? sort_range+0x20/0x20
     run_ksoftirqd+0x15/0x30
     smpboot_thread_fn+0xed/0x200
     kthread+0xdc/0x110
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork+0x28/0x40
     ? kthread_complete_and_exit+0x20/0x20
     ret_from_fork_asm+0x11/0x20
     </TASK>
    
    This commit fixes dm-verity so that it doesn't use the flags
    CRYPTO_TFM_REQ_MAY_SLEEP and CRYPTO_TFM_REQ_MAY_BACKLOG from tasklets. The
    crypto API would do GFP_ATOMIC allocation instead, it could return -ENOMEM
    and we catch -ENOMEM in verity_tasklet and requeue the request to the
    workqueue.
    Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
    Cc: stable@vger.kernel.org	# v6.0+
    Fixes: 5721d4e5 ("dm verity: Add optional "try_verify_in_tasklet" feature")
    Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
    28f07f2a
dm-verity.h 4.06 KB