net: move iov_pages() to net/core/iovec.c
authorJason Wang <jasowang@redhat.com>
Tue, 6 Aug 2013 09:45:03 +0000 (17:45 +0800)
committerDavid S. Miller <davem@davemloft.net>
Wed, 7 Aug 2013 23:52:33 +0000 (16:52 -0700)
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>
drivers/net/macvtap.c
drivers/net/tun.c
include/linux/socket.h
net/core/iovec.c

index a98fb0ed6aef7b9be00c4ed21ecc1b79793f9459..dfec20df17ba7ca7ea793f27dad8eb1433a24b03 100644 (file)
@@ -698,29 +698,6 @@ static int macvtap_skb_to_vnet_hdr(const struct sk_buff *skb,
        return 0;
 }
 
-static unsigned long iov_pages(const struct iovec *iv, int offset,
-                              unsigned long nr_segs)
-{
-       unsigned long seg, base;
-       int pages = 0, len, size;
-
-       while (nr_segs && (offset >= iv->iov_len)) {
-               offset -= iv->iov_len;
-               ++iv;
-               --nr_segs;
-       }
-
-       for (seg = 0; seg < nr_segs; seg++) {
-               base = (unsigned long)iv[seg].iov_base + offset;
-               len = iv[seg].iov_len - offset;
-               size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT;
-               pages += size;
-               offset = 0;
-       }
-
-       return pages;
-}
-
 /* Get packet from user space buffer */
 static ssize_t macvtap_get_user(struct macvtap_queue *q, struct msghdr *m,
                                const struct iovec *iv, unsigned long total_len,
index 5dce262f538ecc8bfb46df05d33e54c5577299dd..18527ef0cc7521cc29c0b96ad8b8203c694e2c23 100644 (file)
@@ -1041,29 +1041,6 @@ static int zerocopy_sg_from_iovec(struct sk_buff *skb, const struct iovec *from,
        return 0;
 }
 
-static unsigned long iov_pages(const struct iovec *iv, int offset,
-                              unsigned long nr_segs)
-{
-       unsigned long seg, base;
-       int pages = 0, len, size;
-
-       while (nr_segs && (offset >= iv->iov_len)) {
-               offset -= iv->iov_len;
-               ++iv;
-               --nr_segs;
-       }
-
-       for (seg = 0; seg < nr_segs; seg++) {
-               base = (unsigned long)iv[seg].iov_base + offset;
-               len = iv[seg].iov_len - offset;
-               size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT;
-               pages += size;
-               offset = 0;
-       }
-
-       return pages;
-}
-
 /* Get packet from user space buffer */
 static ssize_t tun_get_user(struct tun_struct *tun, struct tun_file *tfile,
                            void *msg_control, const struct iovec *iv,
index 230c04bda3e2da37e2c8ce387b3ef0e8c0a36118..445ef7519dc28625e7cb19dd698c1918f36b90bf 100644 (file)
@@ -313,6 +313,8 @@ extern int csum_partial_copy_fromiovecend(unsigned char *kdata,
                                          struct iovec *iov, 
                                          int offset, 
                                          unsigned int len, __wsum *csump);
+extern unsigned long iov_pages(const struct iovec *iov, int offset,
+                              unsigned long nr_segs);
 
 extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode);
 extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata,
index de178e462682af6c97dbfc4326df85942ec25174..b77eeecc00115eefd2395648e71cb337ee53757a 100644 (file)
@@ -212,3 +212,27 @@ out_fault:
        goto out;
 }
 EXPORT_SYMBOL(csum_partial_copy_fromiovecend);
+
+unsigned long iov_pages(const struct iovec *iov, int offset,
+                       unsigned long nr_segs)
+{
+       unsigned long seg, base;
+       int pages = 0, len, size;
+
+       while (nr_segs && (offset >= iov->iov_len)) {
+               offset -= iov->iov_len;
+               ++iov;
+               --nr_segs;
+       }
+
+       for (seg = 0; seg < nr_segs; seg++) {
+               base = (unsigned long)iov[seg].iov_base + offset;
+               len = iov[seg].iov_len - offset;
+               size = ((base & ~PAGE_MASK) + len + ~PAGE_MASK) >> PAGE_SHIFT;
+               pages += size;
+               offset = 0;
+       }
+
+       return pages;
+}
+EXPORT_SYMBOL(iov_pages);