Skip to content

Commit

Permalink
libceph: set page info with byte length
Browse files Browse the repository at this point in the history
When setting page array information for message data, provide the
byte length rather than the page count ceph_msg_data_set_pages().

Signed-off-by: Alex Elder <[email protected]>
Reviewed-by: Josh Durgin <[email protected]>
  • Loading branch information
Alex Elder authored and Sage Weil committed May 2, 2013
1 parent 02afca6 commit f1baeb2
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 14 deletions.
2 changes: 1 addition & 1 deletion fs/ceph/mds_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -1721,7 +1721,7 @@ static struct ceph_msg *create_request_message(struct ceph_mds_client *mdsc,
msg->front.iov_len = p - msg->front.iov_base;
msg->hdr.front_len = cpu_to_le32(msg->front.iov_len);

ceph_msg_data_set_pages(msg, req->r_pages, req->r_num_pages, 0);
ceph_msg_data_set_pages(msg, req->r_pages, req->r_data_len, 0);

msg->hdr.data_len = cpu_to_le32(req->r_data_len);
msg->hdr.data_off = cpu_to_le16(0);
Expand Down
2 changes: 1 addition & 1 deletion include/linux/ceph/messenger.h
Original file line number Diff line number Diff line change
Expand Up @@ -220,7 +220,7 @@ extern void ceph_msg_revoke_incoming(struct ceph_msg *msg);
extern void ceph_con_keepalive(struct ceph_connection *con);

extern void ceph_msg_data_set_pages(struct ceph_msg *msg, struct page **pages,
unsigned int page_count, size_t alignment);
size_t length, size_t alignment);

extern struct ceph_msg *ceph_msg_new(int type, int front_len, gfp_t flags,
bool can_fail);
Expand Down
4 changes: 2 additions & 2 deletions net/ceph/messenger.c
Original file line number Diff line number Diff line change
Expand Up @@ -2690,13 +2690,13 @@ void ceph_con_keepalive(struct ceph_connection *con)
EXPORT_SYMBOL(ceph_con_keepalive);

void ceph_msg_data_set_pages(struct ceph_msg *msg, struct page **pages,
unsigned int page_count, size_t alignment)
size_t length, size_t alignment)
{
/* BUG_ON(msg->pages); */
/* BUG_ON(msg->page_count); */

msg->pages = pages;
msg->page_count = page_count;
msg->page_count = calc_pages_for((u64)alignment, (u64)length);
msg->page_alignment = alignment & ~PAGE_MASK;
}
EXPORT_SYMBOL(ceph_msg_data_set_pages);
Expand Down
14 changes: 4 additions & 10 deletions net/ceph/osd_client.c
Original file line number Diff line number Diff line change
Expand Up @@ -1758,12 +1758,9 @@ int ceph_osdc_start_request(struct ceph_osd_client *osdc,

osd_data = &req->r_data_out;
if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGES) {
unsigned int page_count;

page_count = calc_pages_for((u64)osd_data->alignment,
(u64)osd_data->length);
BUG_ON(osd_data->length > (u64) SIZE_MAX);
ceph_msg_data_set_pages(req->r_request, osd_data->pages,
page_count, osd_data->alignment);
osd_data->length, osd_data->alignment);
#ifdef CONFIG_BLOCK
} else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) {
req->r_request->bio = osd_data->bio;
Expand Down Expand Up @@ -2119,8 +2116,6 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
struct ceph_osd_data *osd_data = &req->r_data_in;

if (osd_data->type == CEPH_OSD_DATA_TYPE_PAGES) {
unsigned int page_count;

if (osd_data->pages &&
unlikely(osd_data->length < data_len)) {

Expand All @@ -2132,10 +2127,9 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
m = NULL;
goto out;
}
page_count = calc_pages_for((u64)osd_data->alignment,
(u64)osd_data->length);
BUG_ON(osd_data->length > (u64) SIZE_MAX);
ceph_msg_data_set_pages(m, osd_data->pages,
osd_data->num_pages, osd_data->alignment);
osd_data->length, osd_data->alignment);
#ifdef CONFIG_BLOCK
} else if (osd_data->type == CEPH_OSD_DATA_TYPE_BIO) {
m->bio = osd_data->bio;
Expand Down

0 comments on commit f1baeb2

Please sign in to comment.