diff options
author | Jason Wang <jasowang@redhat.com> | 2013-08-06 05:45:03 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-07 19:52:33 -0400 |
commit | b4bf07771faaf959b0a916d35b1b930c030e30a8 (patch) | |
tree | 9292ea7010fc74fb5c3f5039ee3886b1f42702f3 /net/core/iovec.c | |
parent | 6261d983f226f0a6a8d4d32b57a032bc23a5ebb6 (diff) |
net: move iov_pages() to net/core/iovec.c
To let it be reused and reduce code duplication.
Signed-off-by: Jason Wang <jasowang@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/iovec.c')
-rw-r--r-- | net/core/iovec.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/net/core/iovec.c b/net/core/iovec.c index de178e462682..b77eeecc0011 100644 --- a/net/core/iovec.c +++ b/net/core/iovec.c | |||
@@ -212,3 +212,27 @@ out_fault: | |||
212 | goto out; | 212 | goto out; |
213 | } | 213 | } |
214 | EXPORT_SYMBOL(csum_partial_copy_fromiovecend); | 214 | EXPORT_SYMBOL(csum_partial_copy_fromiovecend); |
215 | |||
216 | unsigned long iov_pages(const struct iovec *iov, int offset, | ||
217 | unsigned long nr_segs) | ||
218 | { | ||
219 | unsigned long seg, base; | ||
220 | int pages = 0, len, size; | ||
221 | |||
222 | while (nr_segs && (offset >= iov->iov_len)) { | ||
223 | offset -= iov->iov_len; | ||
224 | ++iov; | ||
225 | --nr_segs; | ||
226 | } | ||
227 | |||
228 | for (seg = 0; seg < nr_segs; seg++) { | ||
229 | base = (unsigned long)iov[seg].iov_base + offset; | ||
230 | len = iov[seg].iov_len - offset; | ||
231 | size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT; | ||
232 | pages += size; | ||
233 | offset = 0; | ||
234 | } | ||
235 | |||
236 | return pages; | ||
237 | } | ||
238 | EXPORT_SYMBOL(iov_pages); | ||