libceph: record message data byte length
authorAlex Elder <elder@inktank.com>
Thu, 7 Mar 2013 21:38:26 +0000 (15:38 -0600)
committerSage Weil <sage@inktank.com>
Thu, 2 May 2013 04:16:42 +0000 (21:16 -0700)
Record the number of bytes of data in a page array rather than the
number of pages in the array.  It can be assumed that the page array
is of sufficient size to hold the number of bytes indicated (and
offset by the indicated alignment).

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
include/linux/ceph/messenger.h
net/ceph/messenger.c

index 9d9be4682ac3f766bc153bf285effbe57e6f3196..1991a6f9dc909852dbd644ecb13a1549fe4887c1 100644 (file)
@@ -77,7 +77,7 @@ struct ceph_msg {
 
        struct page **pages;            /* data payload.  NOT OWNER. */
        unsigned int page_alignment;    /* io offset in first page */
-       unsigned int page_count;        /* # pages in array or list */
+       size_t length;                  /* # data bytes in array or list */
        struct ceph_pagelist *pagelist; /* instead of pages */
 #ifdef CONFIG_BLOCK
        unsigned int bio_seg;           /* current bio segment */
index 1965d785cf836b03f31cadeaafbe92bfb09d1140..f48e2af950055a96aa0b27a28f468719205ac8b0 100644 (file)
@@ -809,11 +809,10 @@ static void prepare_write_message(struct ceph_connection *con)
                m->bio_iter = NULL;
 #endif
 
-       dout("prepare_write_message %p seq %lld type %d len %d+%d+%d %d pgs\n",
+       dout("prepare_write_message %p seq %lld type %d len %d+%d+%d (%zd)\n",
             m, con->out_seq, le16_to_cpu(m->hdr.type),
             le32_to_cpu(m->hdr.front_len), le32_to_cpu(m->hdr.middle_len),
-            le32_to_cpu(m->hdr.data_len),
-            m->page_count);
+            le32_to_cpu(m->hdr.data_len), m->length);
        BUG_ON(le32_to_cpu(m->hdr.front_len) != m->front.iov_len);
 
        /* tag + hdr + front + middle */
@@ -1091,9 +1090,8 @@ static int write_partial_msg_pages(struct ceph_connection *con)
        const size_t trail_len = (msg->trail ? msg->trail->length : 0);
        const size_t trail_off = data_len - trail_len;
 
-       dout("write_partial_msg_pages %p msg %p page %d/%d offset %d\n",
-            con, msg, con->out_msg_pos.page, msg->page_count,
-            con->out_msg_pos.page_pos);
+       dout("write_partial_msg_pages %p msg %p page %d offset %d\n",
+            con, msg, con->out_msg_pos.page, con->out_msg_pos.page_pos);
 
        /*
         * Iterate through each page that contains data to be
@@ -2695,10 +2693,10 @@ void ceph_msg_data_set_pages(struct ceph_msg *msg, struct page **pages,
        /* BUG_ON(!pages); */
        /* BUG_ON(!length); */
        /* BUG_ON(msg->pages); */
-       /* BUG_ON(msg->page_count); */
+       /* BUG_ON(msg->length); */
 
        msg->pages = pages;
-       msg->page_count = calc_pages_for((u64)alignment, (u64)length);
+       msg->length = length;
        msg->page_alignment = alignment & ~PAGE_MASK;
 }
 EXPORT_SYMBOL(ceph_msg_data_set_pages);
@@ -2906,7 +2904,7 @@ void ceph_msg_last_put(struct kref *kref)
                ceph_buffer_put(m->middle);
                m->middle = NULL;
        }
-       m->page_count = 0;
+       m->length = 0;
        m->pages = NULL;
 
        if (m->pagelist) {
@@ -2926,8 +2924,8 @@ EXPORT_SYMBOL(ceph_msg_last_put);
 
 void ceph_msg_dump(struct ceph_msg *msg)
 {
-       pr_debug("msg_dump %p (front_max %d page_count %d)\n", msg,
-                msg->front_max, msg->page_count);
+       pr_debug("msg_dump %p (front_max %d length %zd)\n", msg,
+                msg->front_max, msg->length);
        print_hex_dump(KERN_DEBUG, "header: ",
                       DUMP_PREFIX_OFFSET, 16, 1,
                       &msg->hdr, sizeof(msg->hdr), true);