diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2018-02-02 09:32:45 -0600 |
---|---|---|
committer | Eric Sandeen <sandeen@redhat.com> | 2018-02-02 09:32:45 -0600 |
commit | e031d90f536d192cb9206cbc55222beeca68d057 (patch) | |
tree | ac0416786a456a02a1518062ee55b04fcaa34257 | |
parent | 173a02839e85915bd4feca0170fd6a0ca87d3bb9 (diff) | |
download | xfsprogs-dev-e031d90f536d192cb9206cbc55222beeca68d057.tar.gz |
xfs_scrub: figure out how many threads we're going to need
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@oracle.com>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
-rw-r--r-- | scrub/common.c | 26 | ||||
-rw-r--r-- | scrub/common.h | 2 | ||||
-rw-r--r-- | scrub/xfs_scrub.h | 3 |
3 files changed, 31 insertions, 0 deletions
diff --git a/scrub/common.c b/scrub/common.c index 37ccd4a36e..05bb89b1de 100644 --- a/scrub/common.c +++ b/scrub/common.c @@ -168,3 +168,29 @@ no_prefix: *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 e26e0e849a..4779dbdc5c 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 51b8b7a44d..6d9f0c1e2d 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; |