Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c4376de authored by Tejun Heo's avatar Tejun Heo Committed by Alasdair G Kergon
Browse files

dm: use non reentrant workqueues if equivalent



kmirrord_wq, kcopyd_work and md->wq are created per dm instance and
serve only a single work item from the dm instance, so non-reentrant
workqueues would provide the same ordering guarantees as ordered ones
while allowing CPU affinity and use of the workqueues for other
purposes.  Switch them to non-reentrant workqueues.

Signed-off-by: default avatarTejun Heo <tj@kernel.org>
Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 4d4d66ab
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -672,7 +672,8 @@ int dm_kcopyd_client_create(unsigned int nr_pages,
		goto bad_slab;

	INIT_WORK(&kc->kcopyd_work, do_work);
	kc->kcopyd_wq = alloc_ordered_workqueue("kcopyd", WQ_MEM_RECLAIM);
	kc->kcopyd_wq = alloc_workqueue("kcopyd",
					WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
	if (!kc->kcopyd_wq)
		goto bad_workqueue;

+3 −2
Original line number Diff line number Diff line
@@ -1085,7 +1085,8 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
	ti->num_flush_requests = 1;
	ti->num_discard_requests = 1;

	ms->kmirrord_wq = alloc_ordered_workqueue("kmirrord", WQ_MEM_RECLAIM);
	ms->kmirrord_wq = alloc_workqueue("kmirrord",
					  WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
	if (!ms->kmirrord_wq) {
		DMERR("couldn't start kmirrord");
		r = -ENOMEM;
@@ -1414,7 +1415,7 @@ static int mirror_iterate_devices(struct dm_target *ti,

static struct target_type mirror_target = {
	.name	 = "mirror",
	.version = {1, 12, 0},
	.version = {1, 12, 1},
	.module	 = THIS_MODULE,
	.ctr	 = mirror_ctr,
	.dtr	 = mirror_dtr,
+2 −1
Original line number Diff line number Diff line
@@ -1883,7 +1883,8 @@ static struct mapped_device *alloc_dev(int minor)
	add_disk(md->disk);
	format_dev_t(md->name, MKDEV(_major, minor));

	md->wq = alloc_ordered_workqueue("kdmflush", WQ_MEM_RECLAIM);
	md->wq = alloc_workqueue("kdmflush",
				 WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
	if (!md->wq)
		goto bad_thread;

+2 −2
Original line number Diff line number Diff line
@@ -268,8 +268,8 @@ enum {

#define DM_VERSION_MAJOR	4
#define DM_VERSION_MINOR	19
#define DM_VERSION_PATCHLEVEL	0
#define DM_VERSION_EXTRA	"-ioctl (2010-10-14)"
#define DM_VERSION_PATCHLEVEL	1
#define DM_VERSION_EXTRA	"-ioctl (2011-01-07)"

/* Status bits */
#define DM_READONLY_FLAG	(1 << 0) /* In/Out */