From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Create the plumbing to figure out how many threads we're going to want to do all of our scrubbing. Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> --- scrub/common.c | 26 ++++++++++++++++++++++++++ scrub/common.h | 2 ++ scrub/xfs_scrub.h | 3 +++ 3 files changed, 31 insertions(+) diff --git a/scrub/common.c b/scrub/common.c index 37ccd4a..05bb89b 100644 --- a/scrub/common.c +++ b/scrub/common.c @@ -168,3 +168,29 @@ auto_units( *units = ""; return number; } + +/* How many threads to kick off? */ +unsigned int +scrub_nproc( + struct scrub_ctx *ctx) +{ + if (nr_threads) + return nr_threads; + return ctx->nr_io_threads; +} + +/* + * How many threads to kick off for a workqueue? If we only want one + * thread, save ourselves the overhead and just run it in the main thread. + */ +unsigned int +scrub_nproc_workqueue( + struct scrub_ctx *ctx) +{ + unsigned int x; + + x = scrub_nproc(ctx); + if (x == 1) + x = 0; + return x; +} diff --git a/scrub/common.h b/scrub/common.h index e26e0e8..4779dbd 100644 --- a/scrub/common.h +++ b/scrub/common.h @@ -61,5 +61,7 @@ debug_tweak_on( double timeval_subtract(struct timeval *tv1, struct timeval *tv2); double auto_space_units(unsigned long long kilobytes, char **units); double auto_units(unsigned long long number, char **units); +unsigned int scrub_nproc(struct scrub_ctx *ctx); +unsigned int scrub_nproc_workqueue(struct scrub_ctx *ctx); #endif /* XFS_SCRUB_COMMON_H_ */ diff --git a/scrub/xfs_scrub.h b/scrub/xfs_scrub.h index 51b8b7a..6d9f0c1 100644 --- a/scrub/xfs_scrub.h +++ b/scrub/xfs_scrub.h @@ -54,6 +54,9 @@ struct scrub_ctx { /* How does the user want us to react to errors? */ enum error_action error_action; + /* Number of threads for metadata scrubbing */ + unsigned int nr_io_threads; + /* Mutable scrub state; use lock. */ pthread_mutex_t lock; unsigned long long max_errors; -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html