summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSage Weil2010-03-02 00:26:41 +0100
committerSage Weil2010-03-02 00:26:41 +0100
commit6f863e712d4114e8ae2f02de64ebeac0546ebaa0 (patch)
tree0a61ce00922aa3670f53f44f7ae5ec2ad19c6c90
parentceph: reset front len on return to msgpool; BUG on mismatched front iov (diff)
downloadkernel-qcow2-linux-6f863e712d4114e8ae2f02de64ebeac0546ebaa0.tar.gz
kernel-qcow2-linux-6f863e712d4114e8ae2f02de64ebeac0546ebaa0.tar.xz
kernel-qcow2-linux-6f863e712d4114e8ae2f02de64ebeac0546ebaa0.zip
ceph: set osd request message front length correctly
We didn't set the front length correctly. When messages used the message pool we ended up with the conservative max (4 KB), and the rest of the time the slightly less conservative estimate. Even though the OSD ignores the extra data, set it to the right value to avoid sending extra data over the network. Signed-off-by: Yehuda Sadeh <yehuda@hq.newdream.net> Signed-off-by: Sage Weil <sage@newdream.net>
-rw-r--r--fs/ceph/osd_client.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/fs/ceph/osd_client.c b/fs/ceph/osd_client.c
index ffe1f4064ccd..c4763bff97b4 100644
--- a/fs/ceph/osd_client.c
+++ b/fs/ceph/osd_client.c
@@ -228,6 +228,9 @@ struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
}
BUG_ON(p > msg->front.iov_base + msg->front.iov_len);
+ msg_size = p - msg->front.iov_base;
+ msg->front.iov_len = msg_size;
+ msg->hdr.front_len = cpu_to_le32(msg_size);
return req;
}