<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From 35520f9de876c01de96264a46ee865707da30068 Mon Sep 17 00:00:00 2001
From: Tejun Heo &lt;tj@kernel.org&gt;
Date: Sun, 12 Dec 2010 20:10:55 +0100
Subject: [PATCH 10/10] dm snapshot persistent: make metadata_wq multithreaded

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 &lt;tj@kernel.org&gt;
Signed-off-by: Mike Snitzer &lt;snitzer@redhat.com&gt;
---
 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(&amp;req.work, do_metadata);
 	queue_work(ps-&gt;metadata_wq, &amp;req.work);
-	flush_workqueue(ps-&gt;metadata_wq);
+	flush_work(&amp;req.work);
 
 	return req.result;
 }
@@ -818,7 +818,7 @@ static int persistent_ctr(struct dm_exception_store *store,
 	atomic_set(&amp;ps-&gt;pending_count, 0);
 	ps-&gt;callbacks = NULL;
 
-	ps-&gt;metadata_wq = alloc_ordered_workqueue("ksnaphd", WQ_MEM_RECLAIM);
+	ps-&gt;metadata_wq = alloc_workqueue("ksnaphd", WQ_MEM_RECLAIM, 0);
 	if (!ps-&gt;metadata_wq) {
 		kfree(ps);
 		DMERR("couldn't start header metadata update thread");
-- 
1.7.2.3

</pre></body></html>