dm-buffered: clean up workqueues Documentation/core-api/workqueue.rst says that create_*workqueue() functions are deprecated. This patch changes them to alloc_workqueue. buffered_flush_ws is unused, this patch deletes it. For bc->buffered_wq, we allow 16 concurrent workqueue threads per CPU, hopefully this is enough to provide some level of concurrency and it won't stall the whole system with too many workqueues. Signed-off-by: Mikulas Patocka --- drivers/md/dm-buffered-target.c | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) Index: linux-2.6/drivers/md/dm-buffered-target.c =================================================================== --- linux-2.6.orig/drivers/md/dm-buffered-target.c +++ linux-2.6/drivers/md/dm-buffered-target.c @@ -29,7 +29,6 @@ enum { S_BUFFER_SPLITS, S_PREFLUSHS, S_F struct buffered_c { struct dm_bufio_client *bufio; struct workqueue_struct *buffered_wq; - struct workqueue_struct *buffered_flush_wq; struct delayed_work buffered_flush_ws; mempool_t async_request_pool; struct workqueue_struct *buffered_async_wq; @@ -539,8 +538,6 @@ static void buffered_dtr(struct dm_targe if (bc->buffered_wq) destroy_workqueue(bc->buffered_wq); - if (bc->buffered_flush_wq) - destroy_workqueue(bc->buffered_flush_wq); if (bc->buffered_async_wq) destroy_workqueue(bc->buffered_async_wq); mempool_exit(&bc->async_request_pool); @@ -634,23 +631,15 @@ static int buffered_ctr(struct dm_target goto bad; } - bc->buffered_wq = create_workqueue("dm-" DM_MSG_PREFIX "-io"); + bc->buffered_wq = alloc_workqueue("dm-" DM_MSG_PREFIX "-io", WQ_MEM_RECLAIM, 16); if (!bc->buffered_wq) { ti->error = "Couldn't start dm-" DM_MSG_PREFIX "-io"; r = -ENOMEM; goto bad; } - bc->buffered_flush_wq = create_singlethread_workqueue("dm-" DM_MSG_PREFIX "-flush"); - if (!bc->buffered_flush_wq) { - ti->error = "Couldn't start dm-" DM_MSG_PREFIX "-flush"; - r = -ENOMEM; - goto bad; - } - if (bc->async_memcpy) { - /* FIXME: multithread workqueue? */ - bc->buffered_async_wq = create_singlethread_workqueue("dm-" DM_MSG_PREFIX "-async"); + bc->buffered_async_wq = alloc_workqueue("dm-" DM_MSG_PREFIX "-async", WQ_MEM_RECLAIM, 1); if (!bc->buffered_async_wq) { ti->error = "Couldn't start dm-" DM_MSG_PREFIX "-async"; r = -ENOMEM; @@ -726,7 +715,6 @@ static void buffered_postsuspend(struct flush_workqueue(bc->buffered_wq); cancel_delayed_work_sync(&bc->buffered_flush_ws); - flush_workqueue(bc->buffered_flush_wq); dm_bufio_write_dirty_buffers(bc->bufio); }