]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfs_scrub: fix threadcount estimates for phase 6
authorDarrick J. Wong <djwong@kernel.org>
Mon, 15 Apr 2024 23:07:46 +0000 (16:07 -0700)
committerDarrick J. Wong <djwong@kernel.org>
Wed, 17 Apr 2024 21:06:27 +0000 (14:06 -0700)
If a filesystem has a realtime device or an external log device, the
media scan can start up a separate readverify controller (and workqueue)
to handle that.  Each of those controllers can call progress_add, so we
need to bump up nr_threads so that the progress reports controller knows
to make its ptvar big enough to handle all these threads.

Signed-off-by: Darrick J. Wong <djwong@kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
scrub/phase6.c

index 99a32bc796207731547e8be0ec252ddd98a33316..393d9eaa83d85332ccbbdfc8e6bfc37a72f99bff 100644 (file)
@@ -743,7 +743,17 @@ phase6_estimate(
 
        *items = cvt_off_fsb_to_b(&ctx->mnt,
                        (d_blocks - d_bfree) + (r_blocks - r_bfree));
+
+       /*
+        * Each read-verify pool starts a thread pool, and each worker thread
+        * can contribute to the progress counter.  Hence we need to set
+        * nr_threads appropriately to handle that many threads.
+        */
        *nr_threads = disk_heads(ctx->datadev);
+       if (ctx->rtdev)
+               *nr_threads += disk_heads(ctx->rtdev);
+       if (ctx->logdev)
+               *nr_threads += disk_heads(ctx->logdev);
        *rshift = 20;
        return 0;
 }