padata: use alignment when calculating the number of worker threads
authorAnthony Yznaga <anthony.yznaga@oracle.com>
Thu, 23 Feb 2023 00:33:12 +0000 (16:33 -0800)
committerHerbert Xu <herbert@gondor.apana.org.au>
Tue, 14 Mar 2023 09:06:44 +0000 (17:06 +0800)
For multithreaded jobs the computed chunk size is rounded up by the
caller-specified alignment. However, the number of worker threads to
use is computed using the minimum chunk size without taking alignment
into account. A sufficiently large alignment value can result in too
many worker threads being allocated for the job.

Signed-off-by: Anthony Yznaga <anthony.yznaga@oracle.com>
Acked-by: Daniel Jordan <daniel.m.jordan@oracle.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
kernel/padata.c

index 106d08e..222d601 100644 (file)
@@ -491,7 +491,7 @@ void __init padata_do_multithreaded(struct padata_mt_job *job)
                return;
 
        /* Ensure at least one thread when size < min_chunk. */
-       nworks = max(job->size / job->min_chunk, 1ul);
+       nworks = max(job->size / max(job->min_chunk, job->align), 1ul);
        nworks = min(nworks, job->max_threads);
 
        if (nworks == 1) {