memcpy(sl->xbuff, sl->xhead, sl->xleft);
                } else  {
                        sl->xleft = 0;
-                       sl->stats.tx_dropped++;
+                       dev->stats.tx_dropped++;
                }
        }
        sl->xhead = sl->xbuff;
                        memcpy(sl->rbuff, rbuff, sl->rcount);
                } else  {
                        sl->rcount = 0;
-                       sl->stats.rx_over_errors++;
+                       dev->stats.rx_over_errors++;
                        set_bit(SLF_ERROR, &sl->flags);
                }
        }
 
 static void x25_asy_bump(struct x25_asy *sl)
 {
+       struct net_device *dev = sl->dev;
        struct sk_buff *skb;
        int count;
        int err;
 
        count = sl->rcount;
-       sl->stats.rx_bytes += count;
+       dev->stats.rx_bytes += count;
 
        skb = dev_alloc_skb(count+1);
        if (skb == NULL) {
                printk(KERN_WARNING "%s: memory squeeze, dropping packet.\n",
                        sl->dev->name);
-               sl->stats.rx_dropped++;
+               dev->stats.rx_dropped++;
                return;
        }
        skb_push(skb, 1);       /* LAPB internal control */
                printk(KERN_DEBUG "x25_asy: data received err - %d\n", err);
        } else {
                netif_rx(skb);
-               sl->stats.rx_packets++;
+               dev->stats.rx_packets++;
        }
 }
 
                len = mtu;
                printk(KERN_DEBUG "%s: truncating oversized transmit packet!\n",
                                        sl->dev->name);
-               sl->stats.tx_dropped++;
+               sl->dev->stats.tx_dropped++;
                x25_asy_unlock(sl);
                return;
        }
        if (sl->xleft <= 0) {
                /* Now serial buffer is almost free & we can start
                 * transmission of another packet */
-               sl->stats.tx_packets++;
+               sl->dev->stats.tx_packets++;
                clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
                x25_asy_unlock(sl);
                return;
        /* We were not busy, so we are now... :-) */
        if (skb != NULL) {
                x25_asy_lock(sl);
-               sl->stats.tx_bytes += skb->len;
+               dev->stats.tx_bytes += skb->len;
                x25_asy_encaps(sl, skb->data, skb->len);
                dev_kfree_skb(skb);
        }
        while (count--) {
                if (fp && *fp++) {
                        if (!test_and_set_bit(SLF_ERROR, &sl->flags))
-                               sl->stats.rx_errors++;
+                               sl->dev->stats.rx_errors++;
                        cp++;
                        continue;
                }
        x25_asy_free(sl);
 }
 
-
-static struct net_device_stats *x25_asy_get_stats(struct net_device *dev)
-{
-       struct x25_asy *sl = netdev_priv(dev);
-       return &sl->stats;
-}
-
-
  /************************************************************************
   *                    STANDARD X.25 ENCAPSULATION                      *
   ************************************************************************/
                        sl->rbuff[sl->rcount++] = s;
                        return;
                }
-               sl->stats.rx_over_errors++;
+               sl->dev->stats.rx_over_errors++;
                set_bit(SLF_ERROR, &sl->flags);
        }
 }
        dev->watchdog_timeo     = HZ*20;
        dev->open               = x25_asy_open_dev;
        dev->stop               = x25_asy_close;
-       dev->get_stats          = x25_asy_get_stats;
        dev->change_mtu         = x25_asy_change_mtu;
        dev->hard_header_len    = 0;
        dev->addr_len           = 0;