netfilter: nf_conntrack: death_by_timeout() fix
[safe/jmp/linux-2.6] / net / phonet / pep-gprs.c
index b0ceac2..480839d 100644 (file)
@@ -115,10 +115,10 @@ static int gprs_recv(struct gprs_dev *gp, struct sk_buff *skb)
                rskb->truesize += rskb->len;
 
                /* Avoid nested fragments */
-               for (fs = skb_shinfo(skb)->frag_list; fs; fs = fs->next)
+               skb_walk_frags(skb, fs)
                        flen += fs->len;
                skb->next = skb_shinfo(skb)->frag_list;
-               skb_shinfo(skb)->frag_list = NULL;
+               skb_frag_list_init(skb);
                skb->len -= flen;
                skb->data_len -= flen;
                skb->truesize -= flen;
@@ -207,14 +207,14 @@ static int gprs_xmit(struct sk_buff *skb, struct net_device *dev)
                                dev->name, err);
                dev->stats.tx_aborted_errors++;
                dev->stats.tx_errors++;
-               dev_kfree_skb(skb);
        } else {
                dev->stats.tx_packets++;
                dev->stats.tx_bytes += len;
        }
 
-       if (!pep_writeable(sk))
-               netif_stop_queue(dev);
+       netif_stop_queue(dev);
+       if (pep_writeable(sk))
+               netif_wake_queue(dev);
        return 0;
 }
 
@@ -227,6 +227,13 @@ static int gprs_set_mtu(struct net_device *dev, int new_mtu)
        return 0;
 }
 
+static const struct net_device_ops gprs_netdev_ops = {
+       .ndo_open       = gprs_open,
+       .ndo_stop       = gprs_close,
+       .ndo_start_xmit = gprs_xmit,
+       .ndo_change_mtu = gprs_set_mtu,
+};
+
 static void gprs_setup(struct net_device *dev)
 {
        dev->features           = NETIF_F_FRAGLIST;
@@ -237,11 +244,8 @@ static void gprs_setup(struct net_device *dev)
        dev->addr_len           = 0;
        dev->tx_queue_len       = 10;
 
+       dev->netdev_ops         = &gprs_netdev_ops;
        dev->destructor         = free_netdev;
-       dev->open               = gprs_open;
-       dev->stop               = gprs_close;
-       dev->hard_start_xmit    = gprs_xmit; /* mandatory */
-       dev->change_mtu         = gprs_set_mtu;
 }
 
 /*