Subject: Re: [1/2] [NET] link_watch: Move link watch list into net_device

From: Andrew Morton <[email-masked]>
Date: Thu, 10 May 2007 15:14:26 -0700

On Thu, 10 May 2007 15:00:05 -0700
Jeremy Fitzhardinge <[email-masked]> wrote:

> Herbert Xu wrote:
> > [NET] link_watch: Move link watch list into net_device
> >
> > These days the link watch mechanism is an integral part of the
> > network subsystem as it manages the carrier status.  So it now
> > makes sense to allocate some memory for it in net_device rather
> > than allocating it on demand.
> 
> I think there's a problem with one of these two patches.  I've been
> noticing that one of my events/X threads has been going into a spin for
> about 5 mins after boot.  I added some debugging to
> kernel/workqueue.c:run_workqueue, since its that loop which seems to be
> spinning due to list corruption.
> 
> When I look to see if that loop has iterated for more than 100 times in
> one go (which seems unlikely),  I get this:
> 
> BUG: cpu 3, count=101 list screwup on c04babe4, func c03217e8
> func=linkwatch_event+0x0/0x2a
>  [<c0109173>] show_trace_log_lvl+0x1a/0x30
>  [<c0109c7f>] show_trace+0x12/0x14
>  [<c0109d0c>] dump_stack+0x16/0x18
>  [<c0137c25>] run_workqueue+0x97/0x18c
>  [<c01386a4>] worker_thread+0xe5/0xf5
>  [<c013afe9>] kthread+0x3b/0x62
>  [<c0108d47>] kernel_thread_helper+0x7/0x10
>  =======================
> 
> 
> I wonder if the problem is that the linkwatch_work is being rescheduled
> when its already been scheduled, or something like that?

Five minutes after boot is when jiffies wraps.  Are you sure it's
a list-screwup rather than a jiffy-wrap screwup?