Skip to content

Commit

Permalink
ipmr: Use on-device stats instead of private ones.
Browse files Browse the repository at this point in the history
These devices use the private area of appropriate size for
statistics. Turning them to use on-device ones make them
"privless" and thus - really small wrt kmalloc cache, they
are allocated from.

Besides, code looks nicer, because of absence of multi-braced
type casts and dereferences.

[ Fix build failures -DaveM ]

Signed-off-by: Pavel Emelyanov <xemul@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Pavel Emelyanov authored and David S. Miller committed May 21, 2008
1 parent 3dca02a commit cf3677a
Showing 1 changed file with 9 additions and 16 deletions.
25 changes: 9 additions & 16 deletions net/ipv4/ipmr.c
Original file line number Diff line number Diff line change
Expand Up @@ -181,26 +181,20 @@ static int reg_vif_num = -1;
static int reg_vif_xmit(struct sk_buff *skb, struct net_device *dev)
{
read_lock(&mrt_lock);
((struct net_device_stats*)netdev_priv(dev))->tx_bytes += skb->len;
((struct net_device_stats*)netdev_priv(dev))->tx_packets++;
dev->stats.tx_bytes += skb->len;
dev->stats.tx_packets++;
ipmr_cache_report(skb, reg_vif_num, IGMPMSG_WHOLEPKT);
read_unlock(&mrt_lock);
kfree_skb(skb);
return 0;
}

static struct net_device_stats *reg_vif_get_stats(struct net_device *dev)
{
return (struct net_device_stats*)netdev_priv(dev);
}

static void reg_vif_setup(struct net_device *dev)
{
dev->type = ARPHRD_PIMREG;
dev->mtu = ETH_DATA_LEN - sizeof(struct iphdr) - 8;
dev->flags = IFF_NOARP;
dev->hard_start_xmit = reg_vif_xmit;
dev->get_stats = reg_vif_get_stats;
dev->destructor = free_netdev;
}

Expand All @@ -209,8 +203,7 @@ static struct net_device *ipmr_reg_vif(void)
struct net_device *dev;
struct in_device *in_dev;

dev = alloc_netdev(sizeof(struct net_device_stats), "pimreg",
reg_vif_setup);
dev = alloc_netdev(0, "pimreg", reg_vif_setup);

if (dev == NULL)
return NULL;
Expand Down Expand Up @@ -1170,8 +1163,8 @@ static void ipmr_queue_xmit(struct sk_buff *skb, struct mfc_cache *c, int vifi)
if (vif->flags & VIFF_REGISTER) {
vif->pkt_out++;
vif->bytes_out+=skb->len;
((struct net_device_stats*)netdev_priv(vif->dev))->tx_bytes += skb->len;
((struct net_device_stats*)netdev_priv(vif->dev))->tx_packets++;
vif->dev->stats.tx_bytes += skb->len;
vif->dev->stats.tx_packets++;
ipmr_cache_report(skb, vifi, IGMPMSG_WHOLEPKT);
kfree_skb(skb);
return;
Expand Down Expand Up @@ -1487,8 +1480,8 @@ int pim_rcv_v1(struct sk_buff * skb)
skb->pkt_type = PACKET_HOST;
dst_release(skb->dst);
skb->dst = NULL;
((struct net_device_stats*)netdev_priv(reg_dev))->rx_bytes += skb->len;
((struct net_device_stats*)netdev_priv(reg_dev))->rx_packets++;
reg_dev->stats.rx_bytes += skb->len;
reg_dev->stats.rx_packets++;
nf_reset(skb);
netif_rx(skb);
dev_put(reg_dev);
Expand Down Expand Up @@ -1542,8 +1535,8 @@ static int pim_rcv(struct sk_buff * skb)
skb->ip_summed = 0;
skb->pkt_type = PACKET_HOST;
dst_release(skb->dst);
((struct net_device_stats*)netdev_priv(reg_dev))->rx_bytes += skb->len;
((struct net_device_stats*)netdev_priv(reg_dev))->rx_packets++;
reg_dev->stats.rx_bytes += skb->len;
reg_dev->stats.rx_packets++;
skb->dst = NULL;
nf_reset(skb);
netif_rx(skb);
Expand Down

0 comments on commit cf3677a

Please sign in to comment.