From 519a7af3f08939ea7c2f152fee51ee3c33b90c91 Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Fri, 5 Apr 2013 01:27:12 -0500 Subject: [PATCH] --- yaml --- r: 373431 b: refs/heads/master c: ec9123c56787fa7fb2608f05b19d21c5e1912d87 h: refs/heads/master i: 373429: e1396dc6d6c909a39afe3d8d7be124b9b04cb31d 373427: d242c940610355927af61c4d273a5e6dae559ff6 373423: 73e1a4dbc2d1afe75a2d6d154298651cb2c190fb v: v3 --- [refs] | 2 +- trunk/include/linux/ceph/osd_client.h | 2 +- trunk/net/ceph/osd_client.c | 63 +++++++++++++-------------- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/[refs] b/[refs] index a9f4b8302773..95eac7aee26c 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a4ce40a9a7c1053ac2a41cf64255e44e356e5522 +refs/heads/master: ec9123c56787fa7fb2608f05b19d21c5e1912d87 diff --git a/trunk/include/linux/ceph/osd_client.h b/trunk/include/linux/ceph/osd_client.h index f8a00b48e550..dd4ca4ba8cab 100644 --- a/trunk/include/linux/ceph/osd_client.h +++ b/trunk/include/linux/ceph/osd_client.h @@ -51,7 +51,7 @@ struct ceph_osd { #define CEPH_OSD_MAX_OP 2 enum ceph_osd_data_type { - CEPH_OSD_DATA_TYPE_NONE, + CEPH_OSD_DATA_TYPE_NONE = 0, CEPH_OSD_DATA_TYPE_PAGES, CEPH_OSD_DATA_TYPE_PAGELIST, #ifdef CONFIG_BLOCK diff --git a/trunk/net/ceph/osd_client.c b/trunk/net/ceph/osd_client.c index 86cb52404f17..cc4003fdc01f 100644 --- a/trunk/net/ceph/osd_client.c +++ b/trunk/net/ceph/osd_client.c @@ -339,9 +339,6 @@ struct ceph_osd_request *ceph_osdc_alloc_request(struct ceph_osd_client *osdc, } req->r_reply = msg; - ceph_osd_data_init(&req->r_data_in); - ceph_osd_data_init(&req->r_data_out); - /* create request message; allow space for oid */ if (use_mempool) msg = ceph_msgpool_get(&osdc->msgpool_op, 0); @@ -549,6 +546,28 @@ void osd_req_op_watch_init(struct ceph_osd_request *osd_req, } EXPORT_SYMBOL(osd_req_op_watch_init); +static void ceph_osdc_msg_data_set(struct ceph_msg *msg, + struct ceph_osd_data *osd_data) +{ + u64 length = ceph_osd_data_length(osd_data); + + if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGES) { + BUG_ON(length > (u64) SIZE_MAX); + if (length) + ceph_msg_data_set_pages(msg, osd_data->pages, + length, osd_data->alignment); + } else if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGELIST) { + BUG_ON(!length); + ceph_msg_data_set_pagelist(msg, osd_data->pagelist); +#ifdef CONFIG_BLOCK + } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) { + ceph_msg_data_set_bio(msg, osd_data->bio, length); +#endif + } else { + BUG_ON(osd_data->type != CEPH_OSD_DATA_TYPE_NONE); + } +} + static u64 osd_req_encode_op(struct ceph_osd_request *req, struct ceph_osd_op *dst, unsigned int which) { @@ -576,17 +595,24 @@ static u64 osd_req_encode_op(struct ceph_osd_request *req, cpu_to_le64(src->extent.truncate_size); dst->extent.truncate_seq = cpu_to_le32(src->extent.truncate_seq); - if (src->op == CEPH_OSD_OP_WRITE) + if (src->op == CEPH_OSD_OP_WRITE) { WARN_ON(src->extent.osd_data != &req->r_data_out); - else + ceph_osdc_msg_data_set(req->r_request, + src->extent.osd_data); + } else { WARN_ON(src->extent.osd_data != &req->r_data_in); + ceph_osdc_msg_data_set(req->r_reply, + src->extent.osd_data); + } break; case CEPH_OSD_OP_CALL: dst->cls.class_len = src->cls.class_len; dst->cls.method_len = src->cls.method_len; dst->cls.indata_len = cpu_to_le32(src->cls.request_data_len); WARN_ON(src->cls.response_data != &req->r_data_in); + ceph_osdc_msg_data_set(req->r_reply, src->cls.response_data); WARN_ON(src->cls.request_info != &req->r_data_out); + ceph_osdc_msg_data_set(req->r_request, src->cls.request_info); BUG_ON(src->cls.request_info->type != CEPH_OSD_DATA_TYPE_PAGELIST); request_data_len = src->cls.request_info->pagelist->length; @@ -1930,28 +1956,6 @@ static void handle_watch_notify(struct ceph_osd_client *osdc, return; } -static void ceph_osdc_msg_data_set(struct ceph_msg *msg, - struct ceph_osd_data *osd_data) -{ - u64 length = ceph_osd_data_length(osd_data); - - if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGES) { - BUG_ON(length > (u64) SIZE_MAX); - if (length) - ceph_msg_data_set_pages(msg, osd_data->pages, - length, osd_data->alignment); - } else if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGELIST) { - BUG_ON(!length); - ceph_msg_data_set_pagelist(msg, osd_data->pagelist); -#ifdef CONFIG_BLOCK - } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) { - ceph_msg_data_set_bio(msg, osd_data->bio, length); -#endif - } else { - BUG_ON(osd_data->type != CEPH_OSD_DATA_TYPE_NONE); - } -} - /* * build new request AND message * @@ -1967,11 +1971,6 @@ void ceph_osdc_build_request(struct ceph_osd_request *req, u64 off, u64 data_len; unsigned int i; - /* Set up response incoming data and request outgoing data fields */ - - ceph_osdc_msg_data_set(req->r_reply, &req->r_data_in); - ceph_osdc_msg_data_set(req->r_request, &req->r_data_out); - req->r_snapid = snap_id; req->r_snapc = ceph_get_snap_context(snapc);