aboutsummaryrefslogtreecommitdiffstats
path: root/net/ceph/osd_client.c
diff options
context:
space:
mode:
authorSage Weil <sage@newdream.net>2010-11-09 15:40:00 -0500
committerSage Weil <sage@newdream.net>2010-11-09 15:43:17 -0500
commitc5c6b19d4b8f5431fca05f28ae9e141045022149 (patch)
tree0961d9aeee49f481134089ac5b93b7118cf3a34b /net/ceph/osd_client.c
parentb7495fc2ff941db6a118a93ab8d61149e3f4cef8 (diff)
ceph: explicitly specify page alignment in network messages
The alignment used for reading data into or out of pages used to be taken from the data_off field in the message header. This only worked as long as the page alignment matched the object offset, breaking direct io to non-page aligned offsets. Instead, explicitly specify the page alignment next to the page vector in the ceph_msg struct, and use that instead of the message header (which probably shouldn't be trusted). The alloc_msg callback is responsible for filling in this field properly when it sets up the page vector. Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'net/ceph/osd_client.c')
-rw-r--r--net/ceph/osd_client.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index 6c096239660c..3e20a122ffa2 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -391,6 +391,8 @@ void ceph_osdc_build_request(struct ceph_osd_request *req,
391 req->r_request->hdr.data_len = cpu_to_le32(data_len); 391 req->r_request->hdr.data_len = cpu_to_le32(data_len);
392 } 392 }
393 393
394 req->r_request->page_alignment = req->r_page_alignment;
395
394 BUG_ON(p > msg->front.iov_base + msg->front.iov_len); 396 BUG_ON(p > msg->front.iov_base + msg->front.iov_len);
395 msg_size = p - msg->front.iov_base; 397 msg_size = p - msg->front.iov_base;
396 msg->front.iov_len = msg_size; 398 msg->front.iov_len = msg_size;
@@ -1657,6 +1659,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
1657 } 1659 }
1658 m->pages = req->r_pages; 1660 m->pages = req->r_pages;
1659 m->nr_pages = req->r_num_pages; 1661 m->nr_pages = req->r_num_pages;
1662 m->page_alignment = req->r_page_alignment;
1660#ifdef CONFIG_BLOCK 1663#ifdef CONFIG_BLOCK
1661 m->bio = req->r_bio; 1664 m->bio = req->r_bio;
1662#endif 1665#endif