Subject: Re: dev->get_stats(dev) in COMPAT_NET_DEV_OPS case

From: Stephen Hemminger <[email-masked]>
Date: Thu, 8 Jan 2009 08:51:01 -0800

On Thu, 08 Jan 2009 14:12:05 +0100
Oliver Hartkopp <[email-masked]> wrote:

> Hello Stephen,
> 
> in commit eeda3fd64f75bcbfaa70ce946513abaf3f23b8e0 ("netdev: introduce 
> dev_get_stats() 
> <http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=commit;h=eeda3fd64f75bcbfaa70ce946513abaf3f23b8e0>")
> you remove the setting of dev->get_stats :
> 
> @@ -4370,7 
> <http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=blob;f=net/core/dev.c;h=ca14ab407b338172758bc409efd2baaf75bdee99;hb=d314774cf2cd5dfeb39a00d37deee65d4c627927#l4370> 
> +4384,6 
> <http://git.kernel.org/?p=linux/kernel/git/davem/net-2.6.git;a=blob;f=net/core/dev.c;h=8843f4e3f5e192eba9eb5154faa1ca4131fb01fc;hb=eeda3fd64f75bcbfaa70ce946513abaf3f23b8e0#l4384> 
> @@ struct net_device *alloc_netdev_mq(int sizeof_priv, const char *name,
>  
>         netdev_init_queues(dev);
>  
> -       dev->get_stats = internal_stats;
>         netpoll_netdev_init(dev);
>         setup(dev);
>         strcpy(dev->name, name);
> 
> I really appreciate your introduction of COMPAT_NET_DEV_OPS but when i 
> try to compile and run a non-converted driver, i get a NULL pointer 
> dereference. I tracked it down to be the call of dev->get_stats(dev).

In most cases, drivers shouldn't be call dev->get_stat directly.
I am working to convert all the in-tree uses of get_stats for 2.6.29.
(There are a couple more left).