aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Elder <elder@inktank.com>2013-03-07 00:39:38 -0500
committerSage Weil <sage@inktank.com>2013-05-02 00:16:46 -0400
commitbae6acd9c65cbfeffc66a9f48ae91dca6e3aec85 (patch)
tree982699ac420bd52c21bdc84230594f65f0ed58bb
parent98a0370898799895aa8f55109f54c33fcd8196b0 (diff)
libceph: use local variables for message positions
There are several places where a message's out_msg_pos or in_msg_pos field is used repeatedly within a function. Use a local pointer variable for this purpose to unclutter the code. This and the upcoming cleanup patches are related to: http://tracker.ceph.com/issues/4403 Signed-off-by: Alex Elder <elder@inktank.com> Reviewed-by: Josh Durgin <josh.durgin@inktank.com>
-rw-r--r--net/ceph/messenger.c85
1 files changed, 46 insertions, 39 deletions
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index 17d9321b7134..7788170524e3 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -725,22 +725,23 @@ static void iter_bio_next(struct bio **bio_iter, unsigned int *seg)
725static void prepare_write_message_data(struct ceph_connection *con) 725static void prepare_write_message_data(struct ceph_connection *con)
726{ 726{
727 struct ceph_msg *msg = con->out_msg; 727 struct ceph_msg *msg = con->out_msg;
728 struct ceph_msg_pos *msg_pos = &con->out_msg_pos;
728 729
729 BUG_ON(!msg); 730 BUG_ON(!msg);
730 BUG_ON(!msg->hdr.data_len); 731 BUG_ON(!msg->hdr.data_len);
731 732
732 /* initialize page iterator */ 733 /* initialize page iterator */
733 con->out_msg_pos.page = 0; 734 msg_pos->page = 0;
734 if (msg->pages) 735 if (msg->pages)
735 con->out_msg_pos.page_pos = msg->page_alignment; 736 msg_pos->page_pos = msg->page_alignment;
736 else 737 else
737 con->out_msg_pos.page_pos = 0; 738 msg_pos->page_pos = 0;
738#ifdef CONFIG_BLOCK 739#ifdef CONFIG_BLOCK
739 if (msg->bio) 740 if (msg->bio)
740 init_bio_iter(msg->bio, &msg->bio_iter, &msg->bio_seg); 741 init_bio_iter(msg->bio, &msg->bio_iter, &msg->bio_seg);
741#endif 742#endif
742 con->out_msg_pos.data_pos = 0; 743 msg_pos->data_pos = 0;
743 con->out_msg_pos.did_page_crc = false; 744 msg_pos->did_page_crc = false;
744 con->out_more = 1; /* data + footer will follow */ 745 con->out_more = 1; /* data + footer will follow */
745} 746}
746 747
@@ -1022,19 +1023,20 @@ static void out_msg_pos_next(struct ceph_connection *con, struct page *page,
1022 size_t len, size_t sent, bool in_trail) 1023 size_t len, size_t sent, bool in_trail)
1023{ 1024{
1024 struct ceph_msg *msg = con->out_msg; 1025 struct ceph_msg *msg = con->out_msg;
1026 struct ceph_msg_pos *msg_pos = &con->out_msg_pos;
1025 1027
1026 BUG_ON(!msg); 1028 BUG_ON(!msg);
1027 BUG_ON(!sent); 1029 BUG_ON(!sent);
1028 1030
1029 con->out_msg_pos.data_pos += sent; 1031 msg_pos->data_pos += sent;
1030 con->out_msg_pos.page_pos += sent; 1032 msg_pos->page_pos += sent;
1031 if (sent < len) 1033 if (sent < len)
1032 return; 1034 return;
1033 1035
1034 BUG_ON(sent != len); 1036 BUG_ON(sent != len);
1035 con->out_msg_pos.page_pos = 0; 1037 msg_pos->page_pos = 0;
1036 con->out_msg_pos.page++; 1038 msg_pos->page++;
1037 con->out_msg_pos.did_page_crc = false; 1039 msg_pos->did_page_crc = false;
1038 if (in_trail) 1040 if (in_trail)
1039 list_rotate_left(&msg->trail->head); 1041 list_rotate_left(&msg->trail->head);
1040 else if (msg->pagelist) 1042 else if (msg->pagelist)
@@ -1049,18 +1051,19 @@ static void in_msg_pos_next(struct ceph_connection *con, size_t len,
1049 size_t received) 1051 size_t received)
1050{ 1052{
1051 struct ceph_msg *msg = con->in_msg; 1053 struct ceph_msg *msg = con->in_msg;
1054 struct ceph_msg_pos *msg_pos = &con->in_msg_pos;
1052 1055
1053 BUG_ON(!msg); 1056 BUG_ON(!msg);
1054 BUG_ON(!received); 1057 BUG_ON(!received);
1055 1058
1056 con->in_msg_pos.data_pos += received; 1059 msg_pos->data_pos += received;
1057 con->in_msg_pos.page_pos += received; 1060 msg_pos->page_pos += received;
1058 if (received < len) 1061 if (received < len)
1059 return; 1062 return;
1060 1063
1061 BUG_ON(received != len); 1064 BUG_ON(received != len);
1062 con->in_msg_pos.page_pos = 0; 1065 msg_pos->page_pos = 0;
1063 con->in_msg_pos.page++; 1066 msg_pos->page++;
1064#ifdef CONFIG_BLOCK 1067#ifdef CONFIG_BLOCK
1065 if (msg->bio) 1068 if (msg->bio)
1066 iter_bio_next(&msg->bio_iter, &msg->bio_seg); 1069 iter_bio_next(&msg->bio_iter, &msg->bio_seg);
@@ -1077,6 +1080,7 @@ static void in_msg_pos_next(struct ceph_connection *con, size_t len,
1077static int write_partial_msg_pages(struct ceph_connection *con) 1080static int write_partial_msg_pages(struct ceph_connection *con)
1078{ 1081{
1079 struct ceph_msg *msg = con->out_msg; 1082 struct ceph_msg *msg = con->out_msg;
1083 struct ceph_msg_pos *msg_pos = &con->out_msg_pos;
1080 unsigned int data_len = le32_to_cpu(msg->hdr.data_len); 1084 unsigned int data_len = le32_to_cpu(msg->hdr.data_len);
1081 size_t len; 1085 size_t len;
1082 bool do_datacrc = !con->msgr->nocrc; 1086 bool do_datacrc = !con->msgr->nocrc;
@@ -1087,7 +1091,7 @@ static int write_partial_msg_pages(struct ceph_connection *con)
1087 const size_t trail_off = data_len - trail_len; 1091 const size_t trail_off = data_len - trail_len;
1088 1092
1089 dout("write_partial_msg_pages %p msg %p page %d offset %d\n", 1093 dout("write_partial_msg_pages %p msg %p page %d offset %d\n",
1090 con, msg, con->out_msg_pos.page, con->out_msg_pos.page_pos); 1094 con, msg, msg_pos->page, msg_pos->page_pos);
1091 1095
1092 /* 1096 /*
1093 * Iterate through each page that contains data to be 1097 * Iterate through each page that contains data to be
@@ -1097,22 +1101,22 @@ static int write_partial_msg_pages(struct ceph_connection *con)
1097 * need to map the page. If we have no pages, they have 1101 * need to map the page. If we have no pages, they have
1098 * been revoked, so use the zero page. 1102 * been revoked, so use the zero page.
1099 */ 1103 */
1100 while (data_len > con->out_msg_pos.data_pos) { 1104 while (data_len > msg_pos->data_pos) {
1101 struct page *page = NULL; 1105 struct page *page = NULL;
1102 int max_write = PAGE_SIZE; 1106 int max_write = PAGE_SIZE;
1103 int bio_offset = 0; 1107 int bio_offset = 0;
1104 1108
1105 in_trail = in_trail || con->out_msg_pos.data_pos >= trail_off; 1109 in_trail = in_trail || msg_pos->data_pos >= trail_off;
1106 if (!in_trail) 1110 if (!in_trail)
1107 total_max_write = trail_off - con->out_msg_pos.data_pos; 1111 total_max_write = trail_off - msg_pos->data_pos;
1108 1112
1109 if (in_trail) { 1113 if (in_trail) {
1110 total_max_write = data_len - con->out_msg_pos.data_pos; 1114 total_max_write = data_len - msg_pos->data_pos;
1111 1115
1112 page = list_first_entry(&msg->trail->head, 1116 page = list_first_entry(&msg->trail->head,
1113 struct page, lru); 1117 struct page, lru);
1114 } else if (msg->pages) { 1118 } else if (msg->pages) {
1115 page = msg->pages[con->out_msg_pos.page]; 1119 page = msg->pages[msg_pos->page];
1116 } else if (msg->pagelist) { 1120 } else if (msg->pagelist) {
1117 page = list_first_entry(&msg->pagelist->head, 1121 page = list_first_entry(&msg->pagelist->head,
1118 struct page, lru); 1122 struct page, lru);
@@ -1128,24 +1132,24 @@ static int write_partial_msg_pages(struct ceph_connection *con)
1128 } else { 1132 } else {
1129 page = zero_page; 1133 page = zero_page;
1130 } 1134 }
1131 len = min_t(int, max_write - con->out_msg_pos.page_pos, 1135 len = min_t(int, max_write - msg_pos->page_pos,
1132 total_max_write); 1136 total_max_write);
1133 1137
1134 if (do_datacrc && !con->out_msg_pos.did_page_crc) { 1138 if (do_datacrc && !msg_pos->did_page_crc) {
1135 void *base; 1139 void *base;
1136 u32 crc = le32_to_cpu(msg->footer.data_crc); 1140 u32 crc = le32_to_cpu(msg->footer.data_crc);
1137 char *kaddr; 1141 char *kaddr;
1138 1142
1139 kaddr = kmap(page); 1143 kaddr = kmap(page);
1140 BUG_ON(kaddr == NULL); 1144 BUG_ON(kaddr == NULL);
1141 base = kaddr + con->out_msg_pos.page_pos + bio_offset; 1145 base = kaddr + msg_pos->page_pos + bio_offset;
1142 crc = crc32c(crc, base, len); 1146 crc = crc32c(crc, base, len);
1143 kunmap(page); 1147 kunmap(page);
1144 msg->footer.data_crc = cpu_to_le32(crc); 1148 msg->footer.data_crc = cpu_to_le32(crc);
1145 con->out_msg_pos.did_page_crc = true; 1149 msg_pos->did_page_crc = true;
1146 } 1150 }
1147 ret = ceph_tcp_sendpage(con->sock, page, 1151 ret = ceph_tcp_sendpage(con->sock, page,
1148 con->out_msg_pos.page_pos + bio_offset, 1152 msg_pos->page_pos + bio_offset,
1149 len, true); 1153 len, true);
1150 if (ret <= 0) 1154 if (ret <= 0)
1151 goto out; 1155 goto out;
@@ -1803,22 +1807,23 @@ static int read_partial_message_pages(struct ceph_connection *con,
1803 struct page **pages, 1807 struct page **pages,
1804 unsigned int data_len, bool do_datacrc) 1808 unsigned int data_len, bool do_datacrc)
1805{ 1809{
1810 struct ceph_msg_pos *msg_pos = &con->in_msg_pos;
1806 struct page *page; 1811 struct page *page;
1807 void *p; 1812 void *p;
1808 int ret; 1813 int ret;
1809 int left; 1814 int left;
1810 1815
1811 left = min((int)(data_len - con->in_msg_pos.data_pos), 1816 left = min((int)(data_len - msg_pos->data_pos),
1812 (int)(PAGE_SIZE - con->in_msg_pos.page_pos)); 1817 (int)(PAGE_SIZE - msg_pos->page_pos));
1813 /* (page) data */ 1818 /* (page) data */
1814 BUG_ON(pages == NULL); 1819 BUG_ON(pages == NULL);
1815 page = pages[con->in_msg_pos.page]; 1820 page = pages[msg_pos->page];
1816 p = kmap(page); 1821 p = kmap(page);
1817 ret = ceph_tcp_recvmsg(con->sock, p + con->in_msg_pos.page_pos, left); 1822 ret = ceph_tcp_recvmsg(con->sock, p + msg_pos->page_pos, left);
1818 if (ret > 0 && do_datacrc) 1823 if (ret > 0 && do_datacrc)
1819 con->in_data_crc = 1824 con->in_data_crc =
1820 crc32c(con->in_data_crc, 1825 crc32c(con->in_data_crc,
1821 p + con->in_msg_pos.page_pos, ret); 1826 p + msg_pos->page_pos, ret);
1822 kunmap(page); 1827 kunmap(page);
1823 if (ret <= 0) 1828 if (ret <= 0)
1824 return ret; 1829 return ret;
@@ -1833,6 +1838,7 @@ static int read_partial_message_bio(struct ceph_connection *con,
1833 unsigned int data_len, bool do_datacrc) 1838 unsigned int data_len, bool do_datacrc)
1834{ 1839{
1835 struct ceph_msg *msg = con->in_msg; 1840 struct ceph_msg *msg = con->in_msg;
1841 struct ceph_msg_pos *msg_pos = &con->in_msg_pos;
1836 struct bio_vec *bv; 1842 struct bio_vec *bv;
1837 struct page *page; 1843 struct page *page;
1838 void *p; 1844 void *p;
@@ -1842,17 +1848,17 @@ static int read_partial_message_bio(struct ceph_connection *con,
1842 BUG_ON(!msg->bio_iter); 1848 BUG_ON(!msg->bio_iter);
1843 bv = bio_iovec_idx(msg->bio_iter, msg->bio_seg); 1849 bv = bio_iovec_idx(msg->bio_iter, msg->bio_seg);
1844 1850
1845 left = min((int)(data_len - con->in_msg_pos.data_pos), 1851 left = min((int)(data_len - msg_pos->data_pos),
1846 (int)(bv->bv_len - con->in_msg_pos.page_pos)); 1852 (int)(bv->bv_len - msg_pos->page_pos));
1847 1853
1848 page = bv->bv_page; 1854 page = bv->bv_page;
1849 p = kmap(page) + bv->bv_offset; 1855 p = kmap(page) + bv->bv_offset;
1850 1856
1851 ret = ceph_tcp_recvmsg(con->sock, p + con->in_msg_pos.page_pos, left); 1857 ret = ceph_tcp_recvmsg(con->sock, p + msg_pos->page_pos, left);
1852 if (ret > 0 && do_datacrc) 1858 if (ret > 0 && do_datacrc)
1853 con->in_data_crc = 1859 con->in_data_crc =
1854 crc32c(con->in_data_crc, 1860 crc32c(con->in_data_crc,
1855 p + con->in_msg_pos.page_pos, ret); 1861 p + msg_pos->page_pos, ret);
1856 kunmap(page); 1862 kunmap(page);
1857 if (ret <= 0) 1863 if (ret <= 0)
1858 return ret; 1864 return ret;
@@ -1869,6 +1875,7 @@ static int read_partial_message_bio(struct ceph_connection *con,
1869static int read_partial_message(struct ceph_connection *con) 1875static int read_partial_message(struct ceph_connection *con)
1870{ 1876{
1871 struct ceph_msg *m = con->in_msg; 1877 struct ceph_msg *m = con->in_msg;
1878 struct ceph_msg_pos *msg_pos = &con->in_msg_pos;
1872 int size; 1879 int size;
1873 int end; 1880 int end;
1874 int ret; 1881 int ret;
@@ -1949,12 +1956,12 @@ static int read_partial_message(struct ceph_connection *con)
1949 if (m->middle) 1956 if (m->middle)
1950 m->middle->vec.iov_len = 0; 1957 m->middle->vec.iov_len = 0;
1951 1958
1952 con->in_msg_pos.page = 0; 1959 msg_pos->page = 0;
1953 if (m->pages) 1960 if (m->pages)
1954 con->in_msg_pos.page_pos = m->page_alignment; 1961 msg_pos->page_pos = m->page_alignment;
1955 else 1962 else
1956 con->in_msg_pos.page_pos = 0; 1963 msg_pos->page_pos = 0;
1957 con->in_msg_pos.data_pos = 0; 1964 msg_pos->data_pos = 0;
1958 1965
1959#ifdef CONFIG_BLOCK 1966#ifdef CONFIG_BLOCK
1960 if (m->bio) 1967 if (m->bio)
@@ -1978,7 +1985,7 @@ static int read_partial_message(struct ceph_connection *con)
1978 } 1985 }
1979 1986
1980 /* (page) data */ 1987 /* (page) data */
1981 while (con->in_msg_pos.data_pos < data_len) { 1988 while (msg_pos->data_pos < data_len) {
1982 if (m->pages) { 1989 if (m->pages) {
1983 ret = read_partial_message_pages(con, m->pages, 1990 ret = read_partial_message_pages(con, m->pages,
1984 data_len, do_datacrc); 1991 data_len, do_datacrc);