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>
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);
struct read_verify_pool *rvp)
{
workqueue_terminate(&rvp->wq);
- workqueue_destroy(&rvp->wq);
}
/* Finish up any read verification work and tear it down. */
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);