| From 792c3a914910bd34302c5345578f85cfcb5e2c01 Mon Sep 17 00:00:00 2001 |
| From: Ilya Dryomov <idryomov@redhat.com> |
| Date: Fri, 10 Oct 2014 18:36:07 +0400 |
| Subject: rbd: rbd workqueues need a resque worker |
| |
| From: Ilya Dryomov <idryomov@redhat.com> |
| |
| commit 792c3a914910bd34302c5345578f85cfcb5e2c01 upstream. |
| |
| Need to use WQ_MEM_RECLAIM for our workqueues to prevent I/O lockups |
| under memory pressure - we sit on the memory reclaim path. |
| |
| Signed-off-by: Ilya Dryomov <idryomov@redhat.com> |
| Tested-by: Micha Krause <micha@krausam.de> |
| Reviewed-by: Sage Weil <sage@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/block/rbd.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/block/rbd.c |
| +++ b/drivers/block/rbd.c |
| @@ -5087,7 +5087,8 @@ static int rbd_dev_device_setup(struct r |
| set_capacity(rbd_dev->disk, rbd_dev->mapping.size / SECTOR_SIZE); |
| set_disk_ro(rbd_dev->disk, rbd_dev->mapping.read_only); |
| |
| - rbd_dev->rq_wq = alloc_workqueue("%s", 0, 0, rbd_dev->disk->disk_name); |
| + rbd_dev->rq_wq = alloc_workqueue("%s", WQ_MEM_RECLAIM, 0, |
| + rbd_dev->disk->disk_name); |
| if (!rbd_dev->rq_wq) { |
| ret = -ENOMEM; |
| goto err_out_mapping; |