aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ceph/osd_client.c
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@hq.newdream.net>2010-01-08 16:58:34 -0500
committerSage Weil <sage@newdream.net>2010-01-25 15:57:37 -0500
commit2450418c47b7998ad55a73f23707b1e21c371eef (patch)
tree1e17dd88f86c5daa1bfbca1aeea0c909391b5829 /fs/ceph/osd_client.c
parent5b1daecd59f95eb24dc629407ed80369c9929520 (diff)
ceph: allocate middle of message before stating to read
Both front and middle parts of the message are now being allocated at the ceph_alloc_msg(). Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net>
Diffstat (limited to 'fs/ceph/osd_client.c')
-rw-r--r--fs/ceph/osd_client.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c
index 8417e21a3cb2..545e93617993 100644
--- a/fs/ceph/osd_client.c
+++ b/fs/ceph/osd_client.c
@@ -1304,18 +1304,28 @@ static void dispatch(struct ceph_connection *con, struct ceph_msg *msg)
1304} 1304}
1305 1305
1306static struct ceph_msg *alloc_msg(struct ceph_connection *con, 1306static struct ceph_msg *alloc_msg(struct ceph_connection *con,
1307 struct ceph_msg_header *hdr) 1307 struct ceph_msg_header *hdr,
1308 int *skip)
1308{ 1309{
1309 struct ceph_osd *osd = con->private; 1310 struct ceph_osd *osd = con->private;
1310 struct ceph_osd_client *osdc = osd->o_osdc; 1311 struct ceph_osd_client *osdc = osd->o_osdc;
1311 int type = le16_to_cpu(hdr->type); 1312 int type = le16_to_cpu(hdr->type);
1312 int front = le32_to_cpu(hdr->front_len); 1313 int front = le32_to_cpu(hdr->front_len);
1314 struct ceph_msg *m;
1313 1315
1316 *skip = 0;
1314 switch (type) { 1317 switch (type) {
1315 case CEPH_MSG_OSD_OPREPLY: 1318 case CEPH_MSG_OSD_OPREPLY:
1316 return ceph_msgpool_get(&osdc->msgpool_op_reply, front); 1319 m = ceph_msgpool_get(&osdc->msgpool_op_reply, front);
1320 break;
1321 default:
1322 return NULL;
1317 } 1323 }
1318 return ceph_alloc_msg(con, hdr); 1324
1325 if (!m)
1326 *skip = 1;
1327
1328 return m;
1319} 1329}
1320 1330
1321/* 1331/*
@@ -1390,6 +1400,5 @@ const static struct ceph_connection_operations osd_con_ops = {
1390 .verify_authorizer_reply = verify_authorizer_reply, 1400 .verify_authorizer_reply = verify_authorizer_reply,
1391 .alloc_msg = alloc_msg, 1401 .alloc_msg = alloc_msg,
1392 .fault = osd_reset, 1402 .fault = osd_reset,
1393 .alloc_middle = ceph_alloc_middle,
1394 .prepare_pages = prepare_pages, 1403 .prepare_pages = prepare_pages,
1395}; 1404};