Commit 9c4376de98719d2768dd919553843de34bb094a6
Committed by
Alasdair G Kergon
1 parent
4d4d66ab53
Exists in
master
and in
4 other branches
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, |
drivers/md/dm.c
... | ... | @@ -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 */ |