diff options
author | Alex Elder <elder@inktank.com> | 2013-03-07 00:39:38 -0500 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-05-02 00:16:46 -0400 |
commit | bae6acd9c65cbfeffc66a9f48ae91dca6e3aec85 (patch) | |
tree | 982699ac420bd52c21bdc84230594f65f0ed58bb | |
parent | 98a0370898799895aa8f55109f54c33fcd8196b0 (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.c | 85 |
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) | |||
725 | static void prepare_write_message_data(struct ceph_connection *con) | 725 | static 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, | |||
1077 | static int write_partial_msg_pages(struct ceph_connection *con) | 1080 | static 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, | |||
1869 | static int read_partial_message(struct ceph_connection *con) | 1875 | static 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); |