Message ID | 156944741622.300131.15141442959494340981.stgit@magnolia (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs_scrub: fix IO error reporting | expand |
On 9/25/19 4:36 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@oracle.com> > > The read verifier pool deals with two different thread counts -- there's > the submitter thread count that enables us to perform per-thread verify > request aggregation, and then there's the io thread pool count which is > the maximum number of IO requests we want to send to the disk at any > given time. > > The io thread pool count should be derived from disk_heads() but instead > we bungle it by measuring and modifying(!) the nproc global variable. > Fix the derivation to use global variables correctly. > > Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Seems like I'd noticed this before but can't remember now. :) Anyway, Reviewed-by: Eric Sandeen <sandeen@redhat.com>
diff --git a/scrub/read_verify.c b/scrub/read_verify.c index 3dac10ce..834571a7 100644 --- a/scrub/read_verify.c +++ b/scrub/read_verify.c @@ -75,6 +75,7 @@ read_verify_pool_alloc( struct read_verify_pool **prvp) { struct read_verify_pool *rvp; + unsigned int verifier_threads = disk_heads(disk); int ret; /* @@ -94,7 +95,7 @@ read_verify_pool_alloc( RVP_IO_MAX_SIZE); if (ret) goto out_free; - ret = ptcounter_alloc(nproc, &rvp->verified_bytes); + ret = ptcounter_alloc(verifier_threads, &rvp->verified_bytes); if (ret) goto out_buf; rvp->miniosz = miniosz; @@ -106,11 +107,8 @@ read_verify_pool_alloc( &rvp->rvstate); if (ret) goto out_counter; - /* Run in the main thread if we only want one thread. */ - if (nproc == 1) - nproc = 0; ret = workqueue_create(&rvp->wq, (struct xfs_mount *)rvp, - disk_heads(disk)); + verifier_threads == 1 ? 0 : verifier_threads); if (ret) goto out_rvstate; *prvp = rvp;