Commit 9c4376de98719d2768dd919553843de34bb094a6

Authored by Tejun Heo
Committed by Alasdair G Kergon
1 parent 4d4d66ab53

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: Tejun Heo <tj@kernel.org>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Alasdair G Kergon <agk@redhat.com>

Showing 4 changed files with 9 additions and 6 deletions Side-by-side Diff

drivers/md/dm-kcopyd.c
... ... @@ -672,7 +672,8 @@
672 672 goto bad_slab;
673 673  
674 674 INIT_WORK(&kc->kcopyd_work, do_work);
675   - kc->kcopyd_wq = alloc_ordered_workqueue("kcopyd", WQ_MEM_RECLAIM);
  675 + kc->kcopyd_wq = alloc_workqueue("kcopyd",
  676 + WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
676 677 if (!kc->kcopyd_wq)
677 678 goto bad_workqueue;
678 679  
drivers/md/dm-raid1.c
... ... @@ -1085,7 +1085,8 @@
1085 1085 ti->num_flush_requests = 1;
1086 1086 ti->num_discard_requests = 1;
1087 1087  
1088   - ms->kmirrord_wq = alloc_ordered_workqueue("kmirrord", WQ_MEM_RECLAIM);
  1088 + ms->kmirrord_wq = alloc_workqueue("kmirrord",
  1089 + WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
1089 1090 if (!ms->kmirrord_wq) {
1090 1091 DMERR("couldn't start kmirrord");
1091 1092 r = -ENOMEM;
... ... @@ -1414,7 +1415,7 @@
1414 1415  
1415 1416 static struct target_type mirror_target = {
1416 1417 .name = "mirror",
1417   - .version = {1, 12, 0},
  1418 + .version = {1, 12, 1},
1418 1419 .module = THIS_MODULE,
1419 1420 .ctr = mirror_ctr,
1420 1421 .dtr = mirror_dtr,
... ... @@ -1883,7 +1883,8 @@
1883 1883 add_disk(md->disk);
1884 1884 format_dev_t(md->name, MKDEV(_major, minor));
1885 1885  
1886   - md->wq = alloc_ordered_workqueue("kdmflush", WQ_MEM_RECLAIM);
  1886 + md->wq = alloc_workqueue("kdmflush",
  1887 + WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
1887 1888 if (!md->wq)
1888 1889 goto bad_thread;
1889 1890  
include/linux/dm-ioctl.h
... ... @@ -268,8 +268,8 @@
268 268  
269 269 #define DM_VERSION_MAJOR 4
270 270 #define DM_VERSION_MINOR 19
271   -#define DM_VERSION_PATCHLEVEL 0
272   -#define DM_VERSION_EXTRA "-ioctl (2010-10-14)"
  271 +#define DM_VERSION_PATCHLEVEL 1
  272 +#define DM_VERSION_EXTRA "-ioctl (2011-01-07)"
273 273  
274 274 /* Status bits */
275 275 #define DM_READONLY_FLAG (1 << 0) /* In/Out */