mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-27 22:24:11 +08:00
libceph: add osd_req_op_extent_osd_data_bvecs()
... and store num_bvecs for client code's convenience. Signed-off-by: Ilya Dryomov <idryomov@gmail.com> Reviewed-by: Jeff Layton <jlayton@redhat.com> Reviewed-by: "Yan, Zheng" <zyan@redhat.com>
This commit is contained in:
parent
3a15b38fd2
commit
0010f7052d
@ -2366,7 +2366,9 @@ static int rbd_obj_issue_copyup(struct rbd_obj_request *obj_req, u32 bytes)
|
||||
osd_req_op_cls_init(obj_req->osd_req, 0, CEPH_OSD_OP_CALL, "rbd",
|
||||
"copyup");
|
||||
osd_req_op_cls_request_data_bvecs(obj_req->osd_req, 0,
|
||||
obj_req->copyup_bvecs, bytes);
|
||||
obj_req->copyup_bvecs,
|
||||
obj_req->copyup_bvec_count,
|
||||
bytes);
|
||||
|
||||
switch (obj_req->img_request->op_type) {
|
||||
case OBJ_OP_WRITE:
|
||||
|
@ -77,7 +77,10 @@ struct ceph_osd_data {
|
||||
u32 bio_length;
|
||||
};
|
||||
#endif /* CONFIG_BLOCK */
|
||||
struct ceph_bvec_iter bvec_pos;
|
||||
struct {
|
||||
struct ceph_bvec_iter bvec_pos;
|
||||
u32 num_bvecs;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@ -412,6 +415,10 @@ void osd_req_op_extent_osd_data_bio(struct ceph_osd_request *osd_req,
|
||||
struct ceph_bio_iter *bio_pos,
|
||||
u32 bio_length);
|
||||
#endif /* CONFIG_BLOCK */
|
||||
void osd_req_op_extent_osd_data_bvecs(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct bio_vec *bvecs, u32 num_bvecs,
|
||||
u32 bytes);
|
||||
void osd_req_op_extent_osd_data_bvec_pos(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct ceph_bvec_iter *bvec_pos);
|
||||
@ -426,7 +433,8 @@ extern void osd_req_op_cls_request_data_pages(struct ceph_osd_request *,
|
||||
bool own_pages);
|
||||
void osd_req_op_cls_request_data_bvecs(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct bio_vec *bvecs, u32 bytes);
|
||||
struct bio_vec *bvecs, u32 num_bvecs,
|
||||
u32 bytes);
|
||||
extern void osd_req_op_cls_response_data_pages(struct ceph_osd_request *,
|
||||
unsigned int which,
|
||||
struct page **pages, u64 length,
|
||||
|
@ -157,10 +157,12 @@ static void ceph_osd_data_bio_init(struct ceph_osd_data *osd_data,
|
||||
#endif /* CONFIG_BLOCK */
|
||||
|
||||
static void ceph_osd_data_bvecs_init(struct ceph_osd_data *osd_data,
|
||||
struct ceph_bvec_iter *bvec_pos)
|
||||
struct ceph_bvec_iter *bvec_pos,
|
||||
u32 num_bvecs)
|
||||
{
|
||||
osd_data->type = CEPH_OSD_DATA_TYPE_BVECS;
|
||||
osd_data->bvec_pos = *bvec_pos;
|
||||
osd_data->num_bvecs = num_bvecs;
|
||||
}
|
||||
|
||||
#define osd_req_op_data(oreq, whch, typ, fld) \
|
||||
@ -237,6 +239,22 @@ void osd_req_op_extent_osd_data_bio(struct ceph_osd_request *osd_req,
|
||||
EXPORT_SYMBOL(osd_req_op_extent_osd_data_bio);
|
||||
#endif /* CONFIG_BLOCK */
|
||||
|
||||
void osd_req_op_extent_osd_data_bvecs(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct bio_vec *bvecs, u32 num_bvecs,
|
||||
u32 bytes)
|
||||
{
|
||||
struct ceph_osd_data *osd_data;
|
||||
struct ceph_bvec_iter it = {
|
||||
.bvecs = bvecs,
|
||||
.iter = { .bi_size = bytes },
|
||||
};
|
||||
|
||||
osd_data = osd_req_op_data(osd_req, which, extent, osd_data);
|
||||
ceph_osd_data_bvecs_init(osd_data, &it, num_bvecs);
|
||||
}
|
||||
EXPORT_SYMBOL(osd_req_op_extent_osd_data_bvecs);
|
||||
|
||||
void osd_req_op_extent_osd_data_bvec_pos(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct ceph_bvec_iter *bvec_pos)
|
||||
@ -244,7 +262,7 @@ void osd_req_op_extent_osd_data_bvec_pos(struct ceph_osd_request *osd_req,
|
||||
struct ceph_osd_data *osd_data;
|
||||
|
||||
osd_data = osd_req_op_data(osd_req, which, extent, osd_data);
|
||||
ceph_osd_data_bvecs_init(osd_data, bvec_pos);
|
||||
ceph_osd_data_bvecs_init(osd_data, bvec_pos, 0);
|
||||
}
|
||||
EXPORT_SYMBOL(osd_req_op_extent_osd_data_bvec_pos);
|
||||
|
||||
@ -287,7 +305,8 @@ EXPORT_SYMBOL(osd_req_op_cls_request_data_pages);
|
||||
|
||||
void osd_req_op_cls_request_data_bvecs(struct ceph_osd_request *osd_req,
|
||||
unsigned int which,
|
||||
struct bio_vec *bvecs, u32 bytes)
|
||||
struct bio_vec *bvecs, u32 num_bvecs,
|
||||
u32 bytes)
|
||||
{
|
||||
struct ceph_osd_data *osd_data;
|
||||
struct ceph_bvec_iter it = {
|
||||
@ -296,7 +315,7 @@ void osd_req_op_cls_request_data_bvecs(struct ceph_osd_request *osd_req,
|
||||
};
|
||||
|
||||
osd_data = osd_req_op_data(osd_req, which, cls, request_data);
|
||||
ceph_osd_data_bvecs_init(osd_data, &it);
|
||||
ceph_osd_data_bvecs_init(osd_data, &it, num_bvecs);
|
||||
osd_req->r_ops[which].cls.indata_len += bytes;
|
||||
osd_req->r_ops[which].indata_len += bytes;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user