aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-04-05 02:27:12 -0400
committerSage Weil <sage@inktank.com>2013-05-02 00:18:17 -0400
commit44cd188d48a95e42651c59ff552d45cc8c667f2c (patch)
treee6fea91aaec8f137a45b14f8624ab65c7656c1e0
parent2fa123201a86ff979813e24f9e5c5fa54931ab7f (diff)
rbd: separate initialization of osd data
The osd data for a request is currently initialized inside rbd_osd_req_create(), but that assumes an object request's data belongs in the osd request's data in or data out field. There are only three places where requests with data are set up, and it turns out it's easier to call just the osd data init routines directly there rather than handling it in rbd_osd_req_create(). (The real motivation here is moving toward getting rid of the osd request in and out data fields.) Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--drivers/block/rbd.c27
1 files changed, 8 insertions, 19 deletions
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index 06912abca601..4cfe9f96589e 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -1344,8 +1344,6 @@ static struct ceph_osd_request *rbd_osd_req_create(
1344 struct ceph_snap_context *snapc = NULL; 1344 struct ceph_snap_context *snapc = NULL;
1345 struct ceph_osd_client *osdc; 1345 struct ceph_osd_client *osdc;
1346 struct ceph_osd_request *osd_req; 1346 struct ceph_osd_request *osd_req;
1347 struct ceph_osd_data *osd_data;
1348 u64 offset = obj_request->offset;
1349 1347
1350 if (img_request) { 1348 if (img_request) {
1351 rbd_assert(img_request->write_request == write_request); 1349 rbd_assert(img_request->write_request == write_request);
@@ -1359,23 +1357,6 @@ static struct ceph_osd_request *rbd_osd_req_create(
1359 osd_req = ceph_osdc_alloc_request(osdc, snapc, 1, false, GFP_ATOMIC); 1357 osd_req = ceph_osdc_alloc_request(osdc, snapc, 1, false, GFP_ATOMIC);
1360 if (!osd_req) 1358 if (!osd_req)
1361 return NULL; /* ENOMEM */ 1359 return NULL; /* ENOMEM */
1362 osd_data = write_request ? &osd_req->r_data_out : &osd_req->r_data_in;
1363
1364 rbd_assert(obj_request_type_valid(obj_request->type));
1365 switch (obj_request->type) {
1366 case OBJ_REQUEST_NODATA:
1367 break; /* Nothing to do */
1368 case OBJ_REQUEST_BIO:
1369 rbd_assert(obj_request->bio_list != NULL);
1370 ceph_osd_data_bio_init(osd_data, obj_request->bio_list,
1371 obj_request->length);
1372 break;
1373 case OBJ_REQUEST_PAGES:
1374 ceph_osd_data_pages_init(osd_data, obj_request->pages,
1375 obj_request->length, offset & ~PAGE_MASK,
1376 false, false);
1377 break;
1378 }
1379 1360
1380 if (write_request) 1361 if (write_request)
1381 osd_req->r_flags = CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_ONDISK; 1362 osd_req->r_flags = CEPH_OSD_FLAG_WRITE | CEPH_OSD_FLAG_ONDISK;
@@ -1596,6 +1577,8 @@ static int rbd_img_request_fill_bio(struct rbd_img_request *img_request,
1596 : &osd_req->r_data_in; 1577 : &osd_req->r_data_in;
1597 osd_req_op_extent_init(osd_req, 0, opcode, offset, length, 1578 osd_req_op_extent_init(osd_req, 0, opcode, offset, length,
1598 0, 0); 1579 0, 0);
1580 ceph_osd_data_bio_init(osd_data, obj_request->bio_list,
1581 obj_request->length);
1599 osd_req_op_extent_osd_data(osd_req, 0, osd_data); 1582 osd_req_op_extent_osd_data(osd_req, 0, osd_data);
1600 rbd_osd_req_format(obj_request, write_request); 1583 rbd_osd_req_format(obj_request, write_request);
1601 1584
@@ -1874,6 +1857,8 @@ static int rbd_obj_method_sync(struct rbd_device *rbd_dev,
1874 osd_req_op_cls_init(obj_request->osd_req, 0, CEPH_OSD_OP_CALL, 1857 osd_req_op_cls_init(obj_request->osd_req, 0, CEPH_OSD_OP_CALL,
1875 class_name, method_name, 1858 class_name, method_name,
1876 outbound, outbound_size); 1859 outbound, outbound_size);
1860 ceph_osd_data_pages_init(osd_data, obj_request->pages, inbound_size,
1861 0, false, false);
1877 osd_req_op_cls_response_data(obj_request->osd_req, 0, osd_data); 1862 osd_req_op_cls_response_data(obj_request->osd_req, 0, osd_data);
1878 rbd_osd_req_format(obj_request, false); 1863 rbd_osd_req_format(obj_request, false);
1879 1864
@@ -2082,6 +2067,10 @@ static int rbd_obj_read_sync(struct rbd_device *rbd_dev,
2082 osd_data = &obj_request->osd_req->r_data_in; 2067 osd_data = &obj_request->osd_req->r_data_in;
2083 osd_req_op_extent_init(obj_request->osd_req, 0, CEPH_OSD_OP_READ, 2068 osd_req_op_extent_init(obj_request->osd_req, 0, CEPH_OSD_OP_READ,
2084 offset, length, 0, 0); 2069 offset, length, 0, 0);
2070 ceph_osd_data_pages_init(osd_data, obj_request->pages,
2071 obj_request->length,
2072 obj_request->offset & ~PAGE_MASK,
2073 false, false);
2085 osd_req_op_extent_osd_data(obj_request->osd_req, 0, osd_data); 2074 osd_req_op_extent_osd_data(obj_request->osd_req, 0, osd_data);
2086 rbd_osd_req_format(obj_request, false); 2075 rbd_osd_req_format(obj_request, false);
2087 2076