dm verity: have verify_wq use WQ_HIGHPRI if "try_verify_in_tasklet"

Allow verify_wq to preempt softirq since verification in tasklet will
fall-back to using it for error handling (or if the bufio cache
doesn't have required hashes).

Suggested-by: Nathan Huckleberry <nhuck@google.com>
Signed-off-by: Mike Snitzer <snitzer@kernel.org>
This commit is contained in:
Mike Snitzer 2022-08-04 15:55:57 -04:00
parent 43fa47cb11
commit 12907efde6

View File

@ -1151,6 +1151,7 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
struct dm_verity_sig_opts verify_args = {0};
struct dm_arg_set as;
unsigned int num;
unsigned int wq_flags;
unsigned long long num_ll;
int r;
int i;
@ -1388,7 +1389,16 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
}
/* WQ_UNBOUND greatly improves performance when running on ramdisk */
v->verify_wq = alloc_workqueue("kverityd", WQ_MEM_RECLAIM | WQ_UNBOUND, num_online_cpus());
wq_flags = WQ_MEM_RECLAIM | WQ_UNBOUND;
if (v->use_tasklet) {
/*
* Allow verify_wq to preempt softirq since verification in
* tasklet will fall-back to using it for error handling
* (or if the bufio cache doesn't have required hashes).
*/
wq_flags |= WQ_HIGHPRI;
}
v->verify_wq = alloc_workqueue("kverityd", wq_flags, num_online_cpus());
if (!v->verify_wq) {
ti->error = "Cannot allocate workqueue";
r = -ENOMEM;