From 0a63ff6c33e28568781c0f2bba6a0e842d20d2eb Mon Sep 17 00:00:00 2001 From: "David S. Miller" Date: Tue, 9 Jun 2009 00:17:44 -0700 Subject: [PATCH] --- yaml --- r: 150757 b: refs/heads/master c: c32ba3f9b8aa2441c7cfcd065f79981cf8cfe9f4 h: refs/heads/master i: 150755: 7982660aa1a535b3ed525ea40523e7dae0aa41da v: v3 --- [refs] | 2 +- trunk/net/appletalk/ddp.c | 31 ++++++++++++++----------------- 2 files changed, 15 insertions(+), 18 deletions(-) diff --git a/[refs] b/[refs] index 0c983281102a..5b81a16542c4 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a5bd8a13e9e0322c7f76b34790ba34e2e0ce2ac5 +refs/heads/master: c32ba3f9b8aa2441c7cfcd065f79981cf8cfe9f4 diff --git a/trunk/net/appletalk/ddp.c b/trunk/net/appletalk/ddp.c index d6a9243641af..b603cbacdc58 100644 --- a/trunk/net/appletalk/ddp.c +++ b/trunk/net/appletalk/ddp.c @@ -939,6 +939,7 @@ static unsigned long atalk_sum_skb(const struct sk_buff *skb, int offset, int len, unsigned long sum) { int start = skb_headlen(skb); + struct sk_buff *frag_iter; int i, copy; /* checksum stuff in header space */ @@ -977,26 +978,22 @@ static unsigned long atalk_sum_skb(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) { - int end; + skb_walk_frags(skb, frag_iter) { + int end; - WARN_ON(start > offset + len); + WARN_ON(start > offset + len); - end = start + list->len; - if ((copy = end - offset) > 0) { - if (copy > len) - copy = len; - sum = atalk_sum_skb(list, offset - start, - copy, sum); - if ((len -= copy) == 0) - return sum; - offset += copy; - } - start = end; + end = start + frag_iter->len; + if ((copy = end - offset) > 0) { + if (copy > len) + copy = len; + sum = atalk_sum_skb(frag_iter, offset - start, + copy, sum); + if ((len -= copy) == 0) + return sum; + offset += copy; } + start = end; } BUG_ON(len > 0);