On Sun, 12 Dec 2010, Tejun Heo wrote: > metadata_wq serves on-stack work items from chunk_io(). Even if > multiple chunk_io() are simultaneously in progress, each is > independent and queued only once, so multithreaded workqueue can be > safely used. > > Switch metadata_wq to multithread and flush the work item instead of > the workqueue in chunk_io(). > > Signed-off-by: Tejun Heo <tj@xxxxxxxxxx> > Cc: Mike Snitzer <snitzer@xxxxxxxxxx> > Cc: dm-devel@xxxxxxxxxx Reviewed-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> Acked-by: Mikulas Patocka <mpatocka@xxxxxxxxxx> > --- > drivers/md/dm-snap-persistent.c | 4 ++-- > 1 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/md/dm-snap-persistent.c b/drivers/md/dm-snap-persistent.c > index d3021a6..95891df 100644 > --- a/drivers/md/dm-snap-persistent.c > +++ b/drivers/md/dm-snap-persistent.c > @@ -256,7 +256,7 @@ static int chunk_io(struct pstore *ps, void *area, chunk_t chunk, int rw, > */ > INIT_WORK_ONSTACK(&req.work, do_metadata); > queue_work(ps->metadata_wq, &req.work); > - flush_workqueue(ps->metadata_wq); > + flush_work(&req.work); > > return req.result; > } > @@ -818,7 +818,7 @@ static int persistent_ctr(struct dm_exception_store *store, > atomic_set(&ps->pending_count, 0); > ps->callbacks = NULL; > > - ps->metadata_wq = alloc_ordered_workqueue("ksnaphd", WQ_MEM_RECLAIM); > + ps->metadata_wq = alloc_workqueue("ksnaphd", WQ_MEM_RECLAIM, 0); > if (!ps->metadata_wq) { > kfree(ps); > DMERR("couldn't start header metadata update thread"); > -- > 1.7.1 > > -- > dm-devel mailing list > dm-devel@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/dm-devel > -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel