aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-03-08 14:35:36 -0500
committerSage Weil <sage@inktank.com>2013-05-02 00:17:03 -0400
commit9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089 (patch)
tree9bf530bb090cb6135c5be31705c5fb69ba4f6139
parent175face2ba31025b0dcd6da4e711fca7764287fa (diff)
libceph: have osd requests support pagelist data
Add support for recording a ceph pagelist as data associated with an osd request. Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--include/linux/ceph/osd_client.h4
-rw-r--r--net/ceph/osd_client.c3
2 files changed, 6 insertions, 1 deletions
diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h
index bcf3f72ec3f8..cf0ba93426da 100644
--- a/include/linux/ceph/osd_client.h
+++ b/include/linux/ceph/osd_client.h
@@ -53,6 +53,7 @@ struct ceph_osd {
53enum ceph_osd_data_type { 53enum ceph_osd_data_type {
54 CEPH_OSD_DATA_TYPE_NONE, 54 CEPH_OSD_DATA_TYPE_NONE,
55 CEPH_OSD_DATA_TYPE_PAGES, 55 CEPH_OSD_DATA_TYPE_PAGES,
56 CEPH_OSD_DATA_TYPE_PAGELIST,
56#ifdef CONFIG_BLOCK 57#ifdef CONFIG_BLOCK
57 CEPH_OSD_DATA_TYPE_BIO, 58 CEPH_OSD_DATA_TYPE_BIO,
58#endif /* CONFIG_BLOCK */ 59#endif /* CONFIG_BLOCK */
@@ -68,8 +69,9 @@ struct ceph_osd_data {
68 bool pages_from_pool; 69 bool pages_from_pool;
69 bool own_pages; 70 bool own_pages;
70 }; 71 };
72 struct ceph_pagelist *pagelist;
71#ifdef CONFIG_BLOCK 73#ifdef CONFIG_BLOCK
72 struct bio *bio; 74 struct bio *bio;
73#endif /* CONFIG_BLOCK */ 75#endif /* CONFIG_BLOCK */
74 }; 76 };
75}; 77};
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index ce34faaa453f..4159df2d67af 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -1757,6 +1757,9 @@ static void ceph_osdc_msg_data_set(struct ceph_msg *msg,
1757 if (osd_data->length) 1757 if (osd_data->length)
1758 ceph_msg_data_set_pages(msg, osd_data->pages, 1758 ceph_msg_data_set_pages(msg, osd_data->pages,
1759 osd_data->length, osd_data->alignment); 1759 osd_data->length, osd_data->alignment);
1760 } else if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGELIST) {
1761 BUG_ON(!osd_data->pagelist->length);
1762 ceph_msg_data_set_pagelist(msg, osd_data->pagelist);
1760#ifdef CONFIG_BLOCK 1763#ifdef CONFIG_BLOCK
1761 } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) { 1764 } else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) {
1762 ceph_msg_data_set_bio(msg, osd_data->bio); 1765 ceph_msg_data_set_bio(msg, osd_data->bio);