All of lore.kernel.org
 help / color / mirror / Atom feed
From: Stephen Suryaputra <ssuryaextr@gmail.com>
To: David Ahern <dsahern@gmail.com>
Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>,
	Julian Anastasov <ja@ssi.bg>,
	Cong Wang <xiyou.wangcong@gmail.com>,
	syzbot <syzbot+30209ea299c09d8785c9@syzkaller.appspotmail.com>,
	ddstreet@ieee.org, dvyukov@google.com,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	syzkaller-bugs@googlegroups.com
Subject: Re: unregister_netdevice: waiting for DEV to become free (2)
Date: Sun, 21 Apr 2019 16:41:26 -0400	[thread overview]
Message-ID: <20190421204126.GA19213@ubuntu> (raw)
In-Reply-To: <dc7c06ae-204d-c287-04a4-d48875476d09@gmail.com>

Hi David,

I looked at patchwork. This patch hasn't been accepted. Is there a plan
to resubmit? It is very useful. I had to debug refcnt issues multiple
times for my employer.

Thanks,

Stephen.

On Mon, Apr 15, 2019 at 09:35:01AM -0600, David Ahern wrote:
> On 4/15/19 7:36 AM, Tetsuo Handa wrote:
> > I traced using debug printk() patch shown below.
> > 
> 
> I find tracepoints (see attached patch) and perf are easier to use to
> debug device refcnt problems.
> 
> For example, limit the stack you have to deal with via sysctl -w
> kernel.perf_event_max_stack=16, and add a filter (e.g., --filter 'name
> == "lo"') to limit collection to a specific device.

> From 068b1b8362ec5fd1b9dffdbd6e84474ada2eb829 Mon Sep 17 00:00:00 2001
> From: David Ahern <dsa@cumulusnetworks.com>
> Date: Thu, 11 Feb 2016 02:40:12 -0800
> Subject: [PATCH] Add tracepoints to dev_hold and dev_put
> 
> Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
> ---
>  include/linux/netdevice.h  |  6 ++++++
>  include/trace/events/net.h | 38 ++++++++++++++++++++++++++++++++++++++
>  net/core/dev.c             | 21 +++++++++++++++++++++
>  3 files changed, 65 insertions(+)
> 
> diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
> index 219f53c30cb3..7ef6fc672dfb 100644
> --- a/include/linux/netdevice.h
> +++ b/include/linux/netdevice.h
> @@ -3193,6 +3193,7 @@ extern int		netdev_budget;
>  /* Called by rtnetlink.c:rtnl_unlock() */
>  void netdev_run_todo(void);
>  
> +#if 0
>  /**
>   *	dev_put - release reference to device
>   *	@dev: network device
> @@ -3214,6 +3215,11 @@ static inline void dev_hold(struct net_device *dev)
>  {
>  	this_cpu_inc(*dev->pcpu_refcnt);
>  }
> +#else
> +void dev_put(struct net_device *dev);
> +void dev_hold(struct net_device *dev);
> +
> +#endif
>  
>  /* Carrier loss detection, dial on demand. The functions netif_carrier_on
>   * and _off may be called from IRQ context, but it is caller
> diff --git a/include/trace/events/net.h b/include/trace/events/net.h
> index 49cc7c3de252..9ed73dfe9d09 100644
> --- a/include/trace/events/net.h
> +++ b/include/trace/events/net.h
> @@ -236,6 +236,44 @@ DEFINE_EVENT(net_dev_rx_verbose_template, netif_rx_ni_entry,
>  	TP_ARGS(skb)
>  );
>  
> +TRACE_EVENT(dev_put,
> +
> +	TP_PROTO(struct net_device *dev),
> +
> +	TP_ARGS(dev),
> +
> +	TP_STRUCT__entry(
> +		__string(	name,		dev->name	)
> +		__field(	int,		refcnt )
> +	),
> +
> +	TP_fast_assign(
> +		__assign_str(name, dev->name);
> +		__entry->refcnt = netdev_refcnt_read(dev);
> +	),
> +
> +	TP_printk("dev=%s refcnt %d", __get_str(name), __entry->refcnt)
> +);
> +
> +TRACE_EVENT(dev_hold,
> +
> +	TP_PROTO(struct net_device *dev),
> +
> +	TP_ARGS(dev),
> +
> +	TP_STRUCT__entry(
> +		__string(	name,		dev->name	)
> +		__field(	int,		refcnt )
> +	),
> +
> +	TP_fast_assign(
> +		__assign_str(name, dev->name);
> +		__entry->refcnt = netdev_refcnt_read(dev);
> +	),
> +
> +	TP_printk("dev=%s refcnt %d", __get_str(name), __entry->refcnt)
> +);
> +
>  #endif /* _TRACE_NET_H */
>  
>  /* This part must be outside protection */
> diff --git a/net/core/dev.c b/net/core/dev.c
> index f1284835b8c9..99ac067afd18 100644
> --- a/net/core/dev.c
> +++ b/net/core/dev.c
> @@ -8117,3 +8117,24 @@ static int __init net_dev_init(void)
>  }
>  
>  subsys_initcall(net_dev_init);
> +
> +
> +void dev_put(struct net_device *dev)
> +{
> +	this_cpu_dec(*dev->pcpu_refcnt);
> +	trace_dev_put(dev);
> +}
> +EXPORT_SYMBOL(dev_put);
> +
> +/**
> + *      dev_hold - get reference to device
> + *      @dev: network device
> + *
> + * Hold reference to device to keep it from being freed.
> + */
> +void dev_hold(struct net_device *dev)
> +{
> +	this_cpu_inc(*dev->pcpu_refcnt);
> +	trace_dev_hold(dev);
> +}
> +EXPORT_SYMBOL(dev_hold);
> -- 
> 2.1.4
> 


  reply	other threads:[~2019-04-21 20:41 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-15 18:50 unregister_netdevice: waiting for DEV to become free (2) syzbot
2018-08-15 20:28 ` syzbot
2018-08-15 20:41   ` Dmitry Vyukov
2018-08-20  4:31 ` syzbot
2018-08-20 12:55   ` Julian Anastasov
2018-08-21  5:40     ` Cong Wang
2018-08-22  4:11       ` Julian Anastasov
2019-04-15 13:36     ` Tetsuo Handa
2019-04-15 15:35       ` David Ahern
2019-04-21 20:41         ` Stephen Suryaputra [this message]
2019-04-22 14:58           ` David Ahern
2019-04-22 16:04             ` Eric Dumazet
2019-04-22 16:09               ` Eric Dumazet
2019-04-16 14:00       ` Tetsuo Handa
2019-04-26 13:43         ` Tetsuo Handa
2019-04-27 17:16           ` David Ahern
2019-04-27 22:33             ` Tetsuo Handa
2019-04-27 23:52               ` Eric Dumazet
2019-04-28  4:22                 ` Tetsuo Handa
2019-04-28 15:04                   ` Eric Dumazet
2019-04-29 18:34                   ` David Ahern
2019-04-29 18:43                     ` David Ahern
2019-05-01 13:38                       ` Tetsuo Handa
2019-05-01 14:52                         ` David Ahern
2019-05-01 16:16                           ` Tetsuo Handa
2019-05-04 14:52                             ` [PATCH] ipv4: Delete uncached routes upon unregistration of loopback device Tetsuo Handa
2019-05-04 15:56                               ` Eric Dumazet
2019-05-04 17:09                                 ` Tetsuo Handa
2019-05-04 17:24                                   ` Eric Dumazet
2019-05-04 20:13                               ` Julian Anastasov
2019-11-28  9:56     ` unregister_netdevice: waiting for DEV to become free (2) Tetsuo Handa
2019-11-29  5:54       ` Lukas Bulwahn
2019-11-29  6:51       ` Jouni Högander
2019-12-05 10:00       ` Jouni Högander
2019-12-05 11:00         ` Tetsuo Handa
2019-12-16 11:12           ` Tetsuo Handa
2019-12-17  7:08             ` Jouni Högander
2019-10-11 10:14   ` Tetsuo Handa
2019-10-11 15:12     ` Alexei Starovoitov
2019-10-16 10:34       ` Toke Høiland-Jørgensen
2019-11-15  9:43         ` Tetsuo Handa
2019-11-21 11:36           ` Toke Høiland-Jørgensen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190421204126.GA19213@ubuntu \
    --to=ssuryaextr@gmail.com \
    --cc=ddstreet@ieee.org \
    --cc=dsahern@gmail.com \
    --cc=dvyukov@google.com \
    --cc=ja@ssi.bg \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=penguin-kernel@I-love.SAKURA.ne.jp \
    --cc=syzbot+30209ea299c09d8785c9@syzkaller.appspotmail.com \
    --cc=syzkaller-bugs@googlegroups.com \
    --cc=xiyou.wangcong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.