aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2014-11-24 18:29:54 -0500
committerAl Viro <viro@zeniv.linux.org.uk>2014-12-09 16:29:11 -0500
commitd3a9632f09153bc46a8077844e05e179f1c10c3f (patch)
treea443ff60494f22ea773f8da499f2b88262724f5c
parentba5684083c7b35e492dd856be2f9724b0efea416 (diff)
skb_copy_datagram_iovec() can die
no callers other than itself. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r--include/linux/skbuff.h2
-rw-r--r--net/core/datagram.c84
2 files changed, 0 insertions, 86 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 4902f2df90c8..ab0bc43c82a4 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2644,8 +2644,6 @@ struct sk_buff *skb_recv_datagram(struct sock *sk, unsigned flags, int noblock,
2644 int *err); 2644 int *err);
2645unsigned int datagram_poll(struct file *file, struct socket *sock, 2645unsigned int datagram_poll(struct file *file, struct socket *sock,
2646 struct poll_table_struct *wait); 2646 struct poll_table_struct *wait);
2647int skb_copy_datagram_iovec(const struct sk_buff *from, int offset,
2648 struct iovec *to, int size);
2649int skb_copy_datagram_iter(const struct sk_buff *from, int offset, 2647int skb_copy_datagram_iter(const struct sk_buff *from, int offset,
2650 struct iov_iter *to, int size); 2648 struct iov_iter *to, int size);
2651static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset, 2649static inline int skb_copy_datagram_msg(const struct sk_buff *from, int offset,
diff --git a/net/core/datagram.c b/net/core/datagram.c
index 41075ed6bb52..df493d68330c 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -310,90 +310,6 @@ int skb_kill_datagram(struct sock *sk, struct sk_buff *skb, unsigned int flags)
310EXPORT_SYMBOL(skb_kill_datagram); 310EXPORT_SYMBOL(skb_kill_datagram);
311 311
312/** 312/**
313 * skb_copy_datagram_iovec - Copy a datagram to an iovec.
314 * @skb: buffer to copy
315 * @offset: offset in the buffer to start copying from
316 * @to: io vector to copy to
317 * @len: amount of data to copy from buffer to iovec
318 *
319 * Note: the iovec is modified during the copy.
320 */
321int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
322 struct iovec *to, int len)
323{
324 int start = skb_headlen(skb);
325 int i, copy = start - offset;
326 struct sk_buff *frag_iter;
327
328 trace_skb_copy_datagram_iovec(skb, len);
329
330 /* Copy header. */
331 if (copy > 0) {
332 if (copy > len)
333 copy = len;
334 if (memcpy_toiovec(to, skb->data + offset, copy))
335 goto fault;
336 if ((len -= copy) == 0)
337 return 0;
338 offset += copy;
339 }
340
341 /* Copy paged appendix. Hmm... why does this look so complicated? */
342 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
343 int end;
344 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
345
346 WARN_ON(start > offset + len);
347
348 end = start + skb_frag_size(frag);
349 if ((copy = end - offset) > 0) {
350 int err;
351 u8 *vaddr;
352 struct page *page = skb_frag_page(frag);
353
354 if (copy > len)
355 copy = len;
356 vaddr = kmap(page);
357 err = memcpy_toiovec(to, vaddr + frag->page_offset +
358 offset - start, copy);
359 kunmap(page);
360 if (err)
361 goto fault;
362 if (!(len -= copy))
363 return 0;
364 offset += copy;
365 }
366 start = end;
367 }
368
369 skb_walk_frags(skb, frag_iter) {
370 int end;
371
372 WARN_ON(start > offset + len);
373
374 end = start + frag_iter->len;
375 if ((copy = end - offset) > 0) {
376 if (copy > len)
377 copy = len;
378 if (skb_copy_datagram_iovec(frag_iter,
379 offset - start,
380 to, copy))
381 goto fault;
382 if ((len -= copy) == 0)
383 return 0;
384 offset += copy;
385 }
386 start = end;
387 }
388 if (!len)
389 return 0;
390
391fault:
392 return -EFAULT;
393}
394EXPORT_SYMBOL(skb_copy_datagram_iovec);
395
396/**
397 * skb_copy_datagram_iter - Copy a datagram to an iovec iterator. 313 * skb_copy_datagram_iter - Copy a datagram to an iovec iterator.
398 * @skb: buffer to copy 314 * @skb: buffer to copy
399 * @offset: offset in the buffer to start copying from 315 * @offset: offset in the buffer to start copying from