summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-03-08 13:35:36 -0600
committerSage Weil <sage@inktank.com>2013-05-01 21:17:03 -0700
commit9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089 (patch)
tree9bf530bb090cb6135c5be31705c5fb69ba4f6139
parent175face2ba31025b0dcd6da4e711fca7764287fa (diff)
downloadop-kernel-dev-9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089.zip
op-kernel-dev-9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089.tar.gz
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 bcf3f72..cf0ba93 100644
--- a/include/linux/ceph/osd_client.h
+++ b/include/linux/ceph/osd_client.h
@@ -53,6 +53,7 @@ struct ceph_osd {
enum ceph_osd_data_type {
CEPH_OSD_DATA_TYPE_NONE,
CEPH_OSD_DATA_TYPE_PAGES,
+ CEPH_OSD_DATA_TYPE_PAGELIST,
#ifdef CONFIG_BLOCK
CEPH_OSD_DATA_TYPE_BIO,
#endif /* CONFIG_BLOCK */
@@ -68,8 +69,9 @@ struct ceph_osd_data {
bool pages_from_pool;
bool own_pages;
};
+ struct ceph_pagelist *pagelist;
#ifdef CONFIG_BLOCK
- struct bio *bio;
+ struct bio *bio;
#endif /* CONFIG_BLOCK */
};
};
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index ce34faa..4159df2 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,
if (osd_data->length)
ceph_msg_data_set_pages(msg, osd_data->pages,
osd_data->length, osd_data->alignment);
+ } else if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGELIST) {
+ BUG_ON(!osd_data->pagelist->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);
OpenPOWER on IntegriCloud