diff options
author | Darrick J. Wong <darrick.wong@oracle.com> | 2019-10-15 12:55:05 -0400 |
---|---|---|
committer | Eric Sandeen <sandeen@sandeen.net> | 2019-10-15 12:55:05 -0400 |
commit | 7668d01d4b4ef72933cd686940e2b15615342df2 (patch) | |
tree | 60c199994a97cf2f244526ad06992f13a6711e58 /scrub | |
parent | 71296cf87ff5897c1e226fb44ecad735a74a6bd5 (diff) | |
download | xfsprogs-dev-7668d01d4b4ef72933cd686940e2b15615342df2.tar.gz |
xfs_scrub: redistribute read verify pool flush and destroy responsibilities
Since workqueues now have separate primitives for "wait for all queued
work" and "destroy workqueue", it makes more sense for the read verify
pool code to call the workqueue destructor from its own destructor
function.
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>
Diffstat (limited to 'scrub')
-rw-r--r-- | scrub/phase6.c | 9 | ||||
-rw-r--r-- | scrub/read_verify.c | 2 |
2 files changed, 8 insertions, 3 deletions
diff --git a/scrub/phase6.c b/scrub/phase6.c index b41f90e0ff..aff04e76f0 100644 --- a/scrub/phase6.c +++ b/scrub/phase6.c @@ -511,12 +511,17 @@ _("Could not create data device media verifier.")); return moveon; out_rtpool: - if (vs.rvp_realtime) + if (vs.rvp_realtime) { + read_verify_pool_flush(vs.rvp_realtime); read_verify_pool_destroy(vs.rvp_realtime); + } out_logpool: - if (vs.rvp_log) + if (vs.rvp_log) { + read_verify_pool_flush(vs.rvp_log); read_verify_pool_destroy(vs.rvp_log); + } out_datapool: + read_verify_pool_flush(vs.rvp_data); read_verify_pool_destroy(vs.rvp_data); out_rbad: bitmap_free(&vs.r_bad); diff --git a/scrub/read_verify.c b/scrub/read_verify.c index bb8f09a85f..e59d3e670c 100644 --- a/scrub/read_verify.c +++ b/scrub/read_verify.c @@ -121,7 +121,6 @@ read_verify_pool_flush( struct read_verify_pool *rvp) { workqueue_terminate(&rvp->wq); - workqueue_destroy(&rvp->wq); } /* Finish up any read verification work and tear it down. */ @@ -129,6 +128,7 @@ void read_verify_pool_destroy( struct read_verify_pool *rvp) { + workqueue_destroy(&rvp->wq); ptvar_free(rvp->rvstate); ptcounter_free(rvp->verified_bytes); free(rvp->readbuf); |