diff options
author | Alex Elder <elder@inktank.com> | 2013-03-08 13:35:36 -0600 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-01 21:17:03 -0700 |
commit | 9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089 (patch) | |
tree | 9bf530bb090cb6135c5be31705c5fb69ba4f6139 | |
parent | 175face2ba31025b0dcd6da4e711fca7764287fa (diff) | |
download | linux-9a5e6d09ddd0cd68ce64c3aa54095e4a0e85b089.tar.bz2 |
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.h | 4 | ||||
-rw-r--r-- | net/ceph/osd_client.c | 3 |
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 { 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 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, 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); |