|
10 | 10 | #include <linux/vmalloc.h> |
11 | 11 | #include <linux/splice.h> |
12 | 12 | #include <linux/compat.h> |
13 | | -#include <net/checksum.h> |
14 | 13 | #include <linux/scatterlist.h> |
15 | 14 | #include <linux/instrumented.h> |
16 | 15 | #include <linux/iov_iter.h> |
@@ -179,13 +178,6 @@ void iov_iter_init(struct iov_iter *i, unsigned int direction, |
179 | 178 | } |
180 | 179 | EXPORT_SYMBOL(iov_iter_init); |
181 | 180 |
|
182 | | -static __wsum csum_and_memcpy(void *to, const void *from, size_t len, |
183 | | - __wsum sum, size_t off) |
184 | | -{ |
185 | | - __wsum next = csum_partial_copy_nocheck(from, to, len); |
186 | | - return csum_block_add(sum, next, off); |
187 | | -} |
188 | | - |
189 | 181 | size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i) |
190 | 182 | { |
191 | 183 | if (WARN_ON_ONCE(i->data_source)) |
@@ -1097,87 +1089,6 @@ ssize_t iov_iter_get_pages_alloc2(struct iov_iter *i, |
1097 | 1089 | } |
1098 | 1090 | EXPORT_SYMBOL(iov_iter_get_pages_alloc2); |
1099 | 1091 |
|
1100 | | -static __always_inline |
1101 | | -size_t copy_from_user_iter_csum(void __user *iter_from, size_t progress, |
1102 | | - size_t len, void *to, void *priv2) |
1103 | | -{ |
1104 | | - __wsum next, *csum = priv2; |
1105 | | - |
1106 | | - next = csum_and_copy_from_user(iter_from, to + progress, len); |
1107 | | - *csum = csum_block_add(*csum, next, progress); |
1108 | | - return next ? 0 : len; |
1109 | | -} |
1110 | | - |
1111 | | -static __always_inline |
1112 | | -size_t memcpy_from_iter_csum(void *iter_from, size_t progress, |
1113 | | - size_t len, void *to, void *priv2) |
1114 | | -{ |
1115 | | - __wsum *csum = priv2; |
1116 | | - |
1117 | | - *csum = csum_and_memcpy(to + progress, iter_from, len, *csum, progress); |
1118 | | - return 0; |
1119 | | -} |
1120 | | - |
1121 | | -size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum, |
1122 | | - struct iov_iter *i) |
1123 | | -{ |
1124 | | - if (WARN_ON_ONCE(!i->data_source)) |
1125 | | - return 0; |
1126 | | - return iterate_and_advance2(i, bytes, addr, csum, |
1127 | | - copy_from_user_iter_csum, |
1128 | | - memcpy_from_iter_csum); |
1129 | | -} |
1130 | | -EXPORT_SYMBOL(csum_and_copy_from_iter); |
1131 | | - |
1132 | | -static __always_inline |
1133 | | -size_t copy_to_user_iter_csum(void __user *iter_to, size_t progress, |
1134 | | - size_t len, void *from, void *priv2) |
1135 | | -{ |
1136 | | - __wsum next, *csum = priv2; |
1137 | | - |
1138 | | - next = csum_and_copy_to_user(from + progress, iter_to, len); |
1139 | | - *csum = csum_block_add(*csum, next, progress); |
1140 | | - return next ? 0 : len; |
1141 | | -} |
1142 | | - |
1143 | | -static __always_inline |
1144 | | -size_t memcpy_to_iter_csum(void *iter_to, size_t progress, |
1145 | | - size_t len, void *from, void *priv2) |
1146 | | -{ |
1147 | | - __wsum *csum = priv2; |
1148 | | - |
1149 | | - *csum = csum_and_memcpy(iter_to, from + progress, len, *csum, progress); |
1150 | | - return 0; |
1151 | | -} |
1152 | | - |
1153 | | -size_t csum_and_copy_to_iter(const void *addr, size_t bytes, void *_csstate, |
1154 | | - struct iov_iter *i) |
1155 | | -{ |
1156 | | - struct csum_state *csstate = _csstate; |
1157 | | - __wsum sum; |
1158 | | - |
1159 | | - if (WARN_ON_ONCE(i->data_source)) |
1160 | | - return 0; |
1161 | | - if (unlikely(iov_iter_is_discard(i))) { |
1162 | | - // can't use csum_memcpy() for that one - data is not copied |
1163 | | - csstate->csum = csum_block_add(csstate->csum, |
1164 | | - csum_partial(addr, bytes, 0), |
1165 | | - csstate->off); |
1166 | | - csstate->off += bytes; |
1167 | | - return bytes; |
1168 | | - } |
1169 | | - |
1170 | | - sum = csum_shift(csstate->csum, csstate->off); |
1171 | | - |
1172 | | - bytes = iterate_and_advance2(i, bytes, (void *)addr, &sum, |
1173 | | - copy_to_user_iter_csum, |
1174 | | - memcpy_to_iter_csum); |
1175 | | - csstate->csum = csum_shift(sum, csstate->off); |
1176 | | - csstate->off += bytes; |
1177 | | - return bytes; |
1178 | | -} |
1179 | | -EXPORT_SYMBOL(csum_and_copy_to_iter); |
1180 | | - |
1181 | 1092 | size_t hash_and_copy_to_iter(const void *addr, size_t bytes, void *hashp, |
1182 | 1093 | struct iov_iter *i) |
1183 | 1094 | { |
|
0 commit comments