aboutsummaryrefslogtreecommitdiffstats
path: root/scrub
diff options
context:
space:
mode:
authorDarrick J. Wong <darrick.wong@oracle.com>2019-10-15 12:55:05 -0400
committerEric Sandeen <sandeen@sandeen.net>2019-10-15 12:55:05 -0400
commit7668d01d4b4ef72933cd686940e2b15615342df2 (patch)
tree60c199994a97cf2f244526ad06992f13a6711e58 /scrub
parent71296cf87ff5897c1e226fb44ecad735a74a6bd5 (diff)
downloadxfsprogs-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.c9
-rw-r--r--scrub/read_verify.c2
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);