|
Luis Henriques |
d1cb8c |
From: Ilya Dryomov <idryomov@gmail.com>
|
|
Luis Henriques |
d1cb8c |
Date: Sat, 20 Jan 2018 10:30:10 +0100
|
|
Luis Henriques |
d1cb8c |
Subject: rbd: don't (ab)use obj_req->pages for stat requests
|
|
Luis Henriques |
d1cb8c |
Git-commit: 06fbb6993504974db6334a80b6796d6522ad45eb
|
|
Luis Henriques |
d1cb8c |
Patch-mainline: v4.17-rc1
|
|
Luis Henriques |
d1cb8c |
References: FATE#324714
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
obj_req->pages is for provided data buffers. stat requests are
|
|
Luis Henriques |
d1cb8c |
internal and should be NODATA.
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
|
|
Luis Henriques |
d1cb8c |
Reviewed-by: Alex Elder <elder@linaro.org>
|
|
Luis Henriques |
d1cb8c |
Acked-by: Luis Henriques <lhenriques@suse.com>
|
|
Luis Henriques |
d1cb8c |
---
|
|
Luis Henriques |
d1cb8c |
drivers/block/rbd.c | 15 +++++----------
|
|
Luis Henriques |
d1cb8c |
1 file changed, 5 insertions(+), 10 deletions(-)
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
--- a/drivers/block/rbd.c
|
|
Luis Henriques |
d1cb8c |
+++ b/drivers/block/rbd.c
|
|
Luis Henriques |
d1cb8c |
@@ -2636,11 +2636,9 @@ static int rbd_img_obj_exists_submit(str
|
|
Luis Henriques |
d1cb8c |
struct rbd_device *rbd_dev = obj_request->img_request->rbd_dev;
|
|
Luis Henriques |
d1cb8c |
struct rbd_obj_request *stat_request;
|
|
Luis Henriques |
d1cb8c |
struct page **pages;
|
|
Luis Henriques |
d1cb8c |
- u32 page_count;
|
|
Luis Henriques |
d1cb8c |
- size_t size;
|
|
Luis Henriques |
d1cb8c |
int ret;
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
- stat_request = rbd_obj_request_create(OBJ_REQUEST_PAGES);
|
|
Luis Henriques |
d1cb8c |
+ stat_request = rbd_obj_request_create(OBJ_REQUEST_NODATA);
|
|
Luis Henriques |
d1cb8c |
if (!stat_request)
|
|
Luis Henriques |
d1cb8c |
return -ENOMEM;
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
@@ -2661,22 +2659,19 @@ static int rbd_img_obj_exists_submit(str
|
|
Luis Henriques |
d1cb8c |
* le32 tv_nsec;
|
|
Luis Henriques |
d1cb8c |
* } mtime;
|
|
Luis Henriques |
d1cb8c |
*/
|
|
Luis Henriques |
d1cb8c |
- size = sizeof (__le64) + sizeof (__le32) + sizeof (__le32);
|
|
Luis Henriques |
d1cb8c |
- page_count = (u32)calc_pages_for(0, size);
|
|
Luis Henriques |
d1cb8c |
- pages = ceph_alloc_page_vector(page_count, GFP_NOIO);
|
|
Luis Henriques |
d1cb8c |
+ pages = ceph_alloc_page_vector(1, GFP_NOIO);
|
|
Luis Henriques |
d1cb8c |
if (IS_ERR(pages)) {
|
|
Luis Henriques |
d1cb8c |
ret = PTR_ERR(pages);
|
|
Luis Henriques |
d1cb8c |
goto fail_stat_request;
|
|
Luis Henriques |
d1cb8c |
}
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
osd_req_op_init(stat_request->osd_req, 0, CEPH_OSD_OP_STAT, 0);
|
|
Luis Henriques |
d1cb8c |
- osd_req_op_raw_data_in_pages(stat_request->osd_req, 0, pages, size, 0,
|
|
Luis Henriques |
d1cb8c |
- false, false);
|
|
Luis Henriques |
d1cb8c |
+ osd_req_op_raw_data_in_pages(stat_request->osd_req, 0, pages,
|
|
Luis Henriques |
d1cb8c |
+ 8 + sizeof(struct ceph_timespec),
|
|
Luis Henriques |
d1cb8c |
+ 0, false, true);
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
rbd_obj_request_get(obj_request);
|
|
Luis Henriques |
d1cb8c |
stat_request->obj_request = obj_request;
|
|
Luis Henriques |
d1cb8c |
- stat_request->pages = pages;
|
|
Luis Henriques |
d1cb8c |
- stat_request->page_count = page_count;
|
|
Luis Henriques |
d1cb8c |
stat_request->callback = rbd_img_obj_exists_callback;
|
|
Luis Henriques |
d1cb8c |
|
|
Luis Henriques |
d1cb8c |
rbd_obj_request_submit(stat_request);
|