Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=797659fb4a4a511649cd71028141c32ad1698a12
Commit:     797659fb4a4a511649cd71028141c32ad1698a12
Parent:     37e6636669b0b996681586facee8034f7f674f6a
Author:     Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
AuthorDate: Sat Mar 10 15:56:08 2007 -0300
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Apr 25 22:24:43 2007 -0700

    [PPPOE]: Introduce pppoe_hdr()
    
    For consistency with all the other skb->nh.raw accessors.
    
    Also do some really obvious simplifications in pppoe_recvmsg, well the
    kfree_skb one is not so obvious, but free() and kfree() have the same 
behaviour
    (hint :-) ).
    
    Signed-off-by: Arnaldo Carvalho de Melo <[EMAIL PROTECTED]>
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 drivers/net/pppoe.c      |   22 ++++++++--------------
 include/linux/if_pppox.h |    7 +++++++
 2 files changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/net/pppoe.c b/drivers/net/pppoe.c
index ebfa296..3080a44 100644
--- a/drivers/net/pppoe.c
+++ b/drivers/net/pppoe.c
@@ -347,7 +347,7 @@ static int pppoe_rcv_core(struct sock *sk, struct sk_buff 
*skb)
        struct pppox_sock *relay_po = NULL;
 
        if (sk->sk_state & PPPOX_BOUND) {
-               struct pppoe_hdr *ph = (struct pppoe_hdr *) skb->nh.raw;
+               struct pppoe_hdr *ph = pppoe_hdr(skb);
                int len = ntohs(ph->length);
                skb_pull_rcsum(skb, sizeof(struct pppoe_hdr));
                if (pskb_trim_rcsum(skb, len))
@@ -401,7 +401,7 @@ static int pppoe_rcv(struct sk_buff *skb,
        if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
                goto out;
 
-       ph = (struct pppoe_hdr *) skb->nh.raw;
+       ph = pppoe_hdr(skb);
 
        po = get_item((unsigned long) ph->sid, eth_hdr(skb)->h_source, 
dev->ifindex);
        if (po != NULL)
@@ -433,7 +433,7 @@ static int pppoe_disc_rcv(struct sk_buff *skb,
        if (!(skb = skb_share_check(skb, GFP_ATOMIC)))
                goto out;
 
-       ph = (struct pppoe_hdr *) skb->nh.raw;
+       ph = pppoe_hdr(skb);
        if (ph->code != PADT_CODE)
                goto abort;
 
@@ -931,8 +931,6 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct socket 
*sock,
        struct sock *sk = sock->sk;
        struct sk_buff *skb = NULL;
        int error = 0;
-       int len;
-       struct pppoe_hdr *ph = NULL;
 
        if (sk->sk_state & PPPOX_BOUND) {
                error = -EIO;
@@ -949,19 +947,15 @@ static int pppoe_recvmsg(struct kiocb *iocb, struct 
socket *sock,
        m->msg_namelen = 0;
 
        if (skb) {
-               error = 0;
-               ph = (struct pppoe_hdr *) skb->nh.raw;
-               len = ntohs(ph->length);
+               struct pppoe_hdr *ph = pppoe_hdr(skb);
+               const int len = ntohs(ph->length);
 
                error = memcpy_toiovec(m->msg_iov, (unsigned char *) 
&ph->tag[0], len);
-               if (error < 0)
-                       goto do_skb_free;
-               error = len;
+               if (error == 0)
+                       error = len;
        }
 
-do_skb_free:
-       if (skb)
-               kfree_skb(skb);
+       kfree_skb(skb);
 end:
        return error;
 }
diff --git a/include/linux/if_pppox.h b/include/linux/if_pppox.h
index e33ee76..7044f8a 100644
--- a/include/linux/if_pppox.h
+++ b/include/linux/if_pppox.h
@@ -112,6 +112,13 @@ struct pppoe_hdr {
 } __attribute__ ((packed));
 
 #ifdef __KERNEL__
+#include <linux/skbuff.h>
+
+static inline struct pppoe_hdr *pppoe_hdr(const struct sk_buff *skb)
+{
+       return (struct pppoe_hdr *)skb->nh.raw;
+}
+
 struct pppoe_opt {
        struct net_device      *dev;      /* device associated with socket*/
        int                     ifindex;  /* ifindex of device associated with 
socket */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to