| From 1e37f2f84680fa7f8394fd444b6928e334495ccc Mon Sep 17 00:00:00 2001 |
| From: Ilya Dryomov <idryomov@gmail.com> |
| Date: Mon, 6 Nov 2017 11:33:36 +0100 |
| Subject: rbd: use GFP_NOIO for parent stat and data requests |
| |
| From: Ilya Dryomov <idryomov@gmail.com> |
| |
| commit 1e37f2f84680fa7f8394fd444b6928e334495ccc upstream. |
| |
| rbd_img_obj_exists_submit() and rbd_img_obj_parent_read_full() are on |
| the writeback path for cloned images -- we attempt a stat on the parent |
| object to see if it exists and potentially read it in to call copyup. |
| GFP_NOIO should be used instead of GFP_KERNEL here. |
| |
| Link: http://tracker.ceph.com/issues/22014 |
| Signed-off-by: Ilya Dryomov <idryomov@gmail.com> |
| Reviewed-by: David Disseldorp <ddiss@suse.de> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/block/rbd.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/block/rbd.c |
| +++ b/drivers/block/rbd.c |
| @@ -2788,7 +2788,7 @@ static int rbd_img_obj_parent_read_full( |
| * from the parent. |
| */ |
| page_count = (u32)calc_pages_for(0, length); |
| - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL); |
| + pages = ceph_alloc_page_vector(page_count, GFP_NOIO); |
| if (IS_ERR(pages)) { |
| result = PTR_ERR(pages); |
| pages = NULL; |
| @@ -2922,7 +2922,7 @@ static int rbd_img_obj_exists_submit(str |
| */ |
| size = sizeof (__le64) + sizeof (__le32) + sizeof (__le32); |
| page_count = (u32)calc_pages_for(0, size); |
| - pages = ceph_alloc_page_vector(page_count, GFP_KERNEL); |
| + pages = ceph_alloc_page_vector(page_count, GFP_NOIO); |
| if (IS_ERR(pages)) { |
| ret = PTR_ERR(pages); |
| goto fail_stat_request; |