diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2006-03-21 01:43:56 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2006-03-21 01:43:56 -0500 |
commit | cbb042f9e1292434e3cacb90e67d8d381aeac5a9 (patch) | |
tree | cc42f42232e56b68111cfebdc175197d8607bdd7 /drivers | |
parent | ecba320f2e95c9a0c35011d1ecb1db4419980536 (diff) |
[NET]: Replace skb_pull/skb_postpull_rcsum with skb_pull_rcsum
We're now starting to have quite a number of places that do skb_pull
followed immediately by an skb_postpull_rcsum. We can merge these two
operations into one function with skb_pull_rcsum. This makes sense
since most pull operations on receive skb's need to update the
checksum.
I've decided to make this out-of-line since it is fairly big and the
fast path where hardware checksums are enabled need to call
csum_partial anyway.
Since this is a brand new function we get to add an extra check on the
len argument. As it is most callers of skb_pull ignore its return
value which essentially means that there is no check on the len
argument.
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ppp_generic.c | 4 | ||||
-rw-r--r-- | drivers/net/pppoe.c | 3 |
2 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index 0245e40b51a1..f608c12e3e8b 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
@@ -1691,8 +1691,8 @@ ppp_receive_nonmp_frame(struct ppp *ppp, struct sk_buff *skb) | |||
1691 | || ppp->npmode[npi] != NPMODE_PASS) { | 1691 | || ppp->npmode[npi] != NPMODE_PASS) { |
1692 | kfree_skb(skb); | 1692 | kfree_skb(skb); |
1693 | } else { | 1693 | } else { |
1694 | skb_pull(skb, 2); /* chop off protocol */ | 1694 | /* chop off protocol */ |
1695 | skb_postpull_rcsum(skb, skb->data - 2, 2); | 1695 | skb_pull_rcsum(skb, 2); |
1696 | skb->dev = ppp->dev; | 1696 | skb->dev = ppp->dev; |
1697 | skb->protocol = htons(npindex_to_ethertype[npi]); | 1697 | skb->protocol = htons(npindex_to_ethertype[npi]); |
1698 | skb->mac.raw = skb->data; | 1698 | skb->mac.raw = skb->data; |
diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c index 9369f811075d..475dc930380f 100644 --- a/drivers/net/pppoe.c +++ b/drivers/net/pppoe.c | |||
@@ -337,8 +337,7 @@ static int pppoe_rcv_core(struct sock *sk, struct sk_buff *skb) | |||
337 | if (sk->sk_state & PPPOX_BOUND) { | 337 | if (sk->sk_state & PPPOX_BOUND) { |
338 | struct pppoe_hdr *ph = (struct pppoe_hdr *) skb->nh.raw; | 338 | struct pppoe_hdr *ph = (struct pppoe_hdr *) skb->nh.raw; |
339 | int len = ntohs(ph->length); | 339 | int len = ntohs(ph->length); |
340 | skb_pull(skb, sizeof(struct pppoe_hdr)); | 340 | skb_pull_rcsum(skb, sizeof(struct pppoe_hdr)); |
341 | skb_postpull_rcsum(skb, ph, sizeof(*ph)); | ||
342 | if (pskb_trim_rcsum(skb, len)) | 341 | if (pskb_trim_rcsum(skb, len)) |
343 | goto abort_kfree; | 342 | goto abort_kfree; |
344 | 343 | ||