diff options
author | Alex Elder <elder@inktank.com> | 2013-03-12 08:34:23 +0400 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-02 08:17:29 +0400 |
commit | 686be20875db63c6103573565c63db20153ee6e1 (patch) | |
tree | 1bf80f78424ce402a56a3782572652f42253e214 /net/ceph/messenger.c | |
parent | 61fcdc97c06bce7b6d16dd2a6b478f24cd121d96 (diff) | |
download | linux-686be20875db63c6103573565c63db20153ee6e1.tar.xz |
libceph: get rid of read helpers
Now that read_partial_message_pages() and read_partial_message_bio()
are literally identical functions we can factor them out. They're
pretty simple as well, so just move their relevant content into
read_partial_msg_data().
This is and previous patches together resolve:
http://tracker.ceph.com/issues/4428
Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'net/ceph/messenger.c')
-rw-r--r-- | net/ceph/messenger.c | 80 |
1 files changed, 18 insertions, 62 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c index 598d21830417..a19ba00ce777 100644 --- a/net/ceph/messenger.c +++ b/net/ceph/messenger.c @@ -2185,66 +2185,15 @@ static int read_partial_message_section(struct ceph_connection *con, return 1; } -static int ceph_con_in_msg_alloc(struct ceph_connection *con, int *skip); - -static int read_partial_message_pages(struct ceph_connection *con, - unsigned int data_len, bool do_datacrc) -{ - struct ceph_msg *msg = con->in_msg; - struct page *page; - size_t page_offset; - size_t length; - int ret; - - page = ceph_msg_data_next(&msg->p, &page_offset, &length, NULL); - - ret = ceph_tcp_recvpage(con->sock, page, page_offset, length); - if (ret <= 0) - return ret; - - if (do_datacrc) - con->in_data_crc = ceph_crc32c_page(con->in_data_crc, page, - page_offset, ret); - - in_msg_pos_next(con, length, ret); - - return ret; -} - -#ifdef CONFIG_BLOCK -static int read_partial_message_bio(struct ceph_connection *con, - unsigned int data_len, bool do_datacrc) -{ - struct ceph_msg *msg = con->in_msg; - struct page *page; - size_t page_offset; - size_t length; - int ret; - - BUG_ON(!msg); - - page = ceph_msg_data_next(&msg->b, &page_offset, &length, NULL); - - ret = ceph_tcp_recvpage(con->sock, page, page_offset, length); - if (ret <= 0) - return ret; - - if (do_datacrc) - con->in_data_crc = ceph_crc32c_page(con->in_data_crc, page, - page_offset, ret); - - in_msg_pos_next(con, length, ret); - - return ret; -} -#endif - static int read_partial_msg_data(struct ceph_connection *con) { struct ceph_msg *msg = con->in_msg; struct ceph_msg_pos *msg_pos = &con->in_msg_pos; const bool do_datacrc = !con->msgr->nocrc; unsigned int data_len; + struct page *page; + size_t page_offset; + size_t length; int ret; BUG_ON(!msg); @@ -2252,20 +2201,25 @@ static int read_partial_msg_data(struct ceph_connection *con) data_len = le32_to_cpu(con->in_hdr.data_len); while (msg_pos->data_pos < data_len) { if (ceph_msg_has_pages(msg)) { - ret = read_partial_message_pages(con, data_len, - do_datacrc); - if (ret <= 0) - return ret; + page = ceph_msg_data_next(&msg->p, &page_offset, + &length, NULL); #ifdef CONFIG_BLOCK } else if (ceph_msg_has_bio(msg)) { - ret = read_partial_message_bio(con, - data_len, do_datacrc); - if (ret <= 0) - return ret; + page = ceph_msg_data_next(&msg->b, &page_offset, + &length, NULL); #endif } else { BUG_ON(1); } + ret = ceph_tcp_recvpage(con->sock, page, page_offset, length); + if (ret <= 0) + return ret; + + if (do_datacrc) + con->in_data_crc = ceph_crc32c_page(con->in_data_crc, + page, page_offset, ret); + + in_msg_pos_next(con, length, ret); } return 1; /* must return > 0 to indicate success */ @@ -2274,6 +2228,8 @@ static int read_partial_msg_data(struct ceph_connection *con) /* * read (part of) a message. */ +static int ceph_con_in_msg_alloc(struct ceph_connection *con, int *skip); + static int read_partial_message(struct ceph_connection *con) { struct ceph_msg *m = con->in_msg; |