Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b1a002a authored by David S. Miller's avatar David S. Miller
Browse files

datagram: Use frag list abstraction interfaces.

parent c32ba3f9
Loading
Loading
Loading
Loading
+83 −95
Original line number Diff line number Diff line
@@ -282,6 +282,7 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
{
	int start = skb_headlen(skb);
	int i, copy = start - offset;
	struct sk_buff *frag_iter;

	/* Copy header. */
	if (copy > 0) {
@@ -322,19 +323,16 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
		start = end;
	}

	if (skb_shinfo(skb)->frag_list) {
		struct sk_buff *list = skb_shinfo(skb)->frag_list;

		for (; list; list = list->next) {
	skb_walk_frags(skb, frag_iter) {
		int end;

		WARN_ON(start > offset + len);

			end = start + list->len;
		end = start + frag_iter->len;
		if ((copy = end - offset) > 0) {
			if (copy > len)
				copy = len;
				if (skb_copy_datagram_iovec(list,
			if (skb_copy_datagram_iovec(frag_iter,
						    offset - start,
						    to, copy))
				goto fault;
@@ -344,7 +342,6 @@ int skb_copy_datagram_iovec(const struct sk_buff *skb, int offset,
		}
		start = end;
	}
	}
	if (!len)
		return 0;

@@ -369,6 +366,7 @@ int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
{
	int start = skb_headlen(skb);
	int i, copy = start - offset;
	struct sk_buff *frag_iter;

	/* Copy header. */
	if (copy > 0) {
@@ -411,19 +409,16 @@ int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
		start = end;
	}

	if (skb_shinfo(skb)->frag_list) {
		struct sk_buff *list = skb_shinfo(skb)->frag_list;

		for (; list; list = list->next) {
	skb_walk_frags(skb, frag_iter) {
		int end;

		WARN_ON(start > offset + len);

			end = start + list->len;
		end = start + frag_iter->len;
		if ((copy = end - offset) > 0) {
			if (copy > len)
				copy = len;
				if (skb_copy_datagram_const_iovec(list,
			if (skb_copy_datagram_const_iovec(frag_iter,
							  offset - start,
							  to, to_offset,
							  copy))
@@ -435,7 +430,6 @@ int skb_copy_datagram_const_iovec(const struct sk_buff *skb, int offset,
		}
		start = end;
	}
	}
	if (!len)
		return 0;

@@ -461,6 +455,7 @@ int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
{
	int start = skb_headlen(skb);
	int i, copy = start - offset;
	struct sk_buff *frag_iter;

	/* Copy header. */
	if (copy > 0) {
@@ -506,19 +501,16 @@ int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
		start = end;
	}

	if (skb_shinfo(skb)->frag_list) {
		struct sk_buff *list = skb_shinfo(skb)->frag_list;

		for (; list; list = list->next) {
	skb_walk_frags(skb, frag_iter) {
		int end;

		WARN_ON(start > offset + len);

			end = start + list->len;
		end = start + frag_iter->len;
		if ((copy = end - offset) > 0) {
			if (copy > len)
				copy = len;
				if (skb_copy_datagram_from_iovec(list,
			if (skb_copy_datagram_from_iovec(frag_iter,
							 offset - start,
							 from,
							 from_offset,
@@ -531,7 +523,6 @@ int skb_copy_datagram_from_iovec(struct sk_buff *skb, int offset,
		}
		start = end;
	}
	}
	if (!len)
		return 0;

@@ -545,8 +536,9 @@ static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
				      __wsum *csump)
{
	int start = skb_headlen(skb);
	int pos = 0;
	int i, copy = start - offset;
	struct sk_buff *frag_iter;
	int pos = 0;

	/* Copy header. */
	if (copy > 0) {
@@ -597,20 +589,17 @@ static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
		start = end;
	}

	if (skb_shinfo(skb)->frag_list) {
		struct sk_buff *list = skb_shinfo(skb)->frag_list;

		for (; list; list=list->next) {
	skb_walk_frags(skb, frag_iter) {
		int end;

		WARN_ON(start > offset + len);

			end = start + list->len;
		end = start + frag_iter->len;
		if ((copy = end - offset) > 0) {
			__wsum csum2 = 0;
			if (copy > len)
				copy = len;
				if (skb_copy_and_csum_datagram(list,
			if (skb_copy_and_csum_datagram(frag_iter,
						       offset - start,
						       to, copy,
						       &csum2))
@@ -624,7 +613,6 @@ static int skb_copy_and_csum_datagram(const struct sk_buff *skb, int offset,
		}
		start = end;
	}
	}
	if (!len)
		return 0;