public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Re: [NETPOLL] netconsole: fix soft lockup when removing module
@ 2007-07-01 17:35 Oleg Nesterov
  2007-07-02  6:34 ` Jarek Poplawski
  2007-07-02  7:52 ` [PATCH] " Jarek Poplawski
  0 siblings, 2 replies; 11+ messages in thread
From: Oleg Nesterov @ 2007-07-01 17:35 UTC (permalink / raw)
  To: Jarek Poplawski, Linus Torvalds
  Cc: Andrew Morton, David S. Miller, linux-kernel

Jarek Poplawski wrote:
>
>    #1
>    Until kernel ver. 2.6.21 (including) cancel_rearming_delayed_work()
>    required a work function should always (unconditionally) rearm with
>    delay > 0 - otherwise it would endlessly loop. This patch replaces
>    this function with cancel_delayed_work(). Later kernel versions don't
>    require this, so here it's only for uniformity.

But 2.6.22 doesn't need this change, why it was merged?

In fact, I suspect this change adds a race,

> --- a/net/core/netpoll.c
> +++ b/net/core/netpoll.c
> @@ -72,7 +72,8 @@ static void queue_process(struct work_struct *work)
>  			netif_tx_unlock(dev);
>  			local_irq_restore(flags);
>  
> -			schedule_delayed_work(&npinfo->tx_work, HZ/10);
> +			if (atomic_read(&npinfo->refcnt))
> +				schedule_delayed_work(&npinfo->tx_work, HZ/10);
>  			return;
>  		}
>  		netif_tx_unlock(dev);
> @@ -785,9 +786,15 @@ void netpoll_cleanup(struct netpoll *np)
>  			if (atomic_dec_and_test(&npinfo->refcnt)) {
>  				skb_queue_purge(&npinfo->arp_tx);
>  				skb_queue_purge(&npinfo->txq);
> -				cancel_rearming_delayed_work(&npinfo->tx_work);
> +				cancel_delayed_work(&npinfo->tx_work);
>  				flush_scheduled_work();

Suppose that ->refcnt == 1, and queue_process() was preempted just after
atomic_read(&npinfo->refcnt).

netpoll_cleanup() comes, cancel_delayed_work() does nothing, flush_scheduled_work()
sleeps.

queue_process() gets CPU, re-schedules ->tx_work, and returns.

flush_scheduled_work() completes, netpoll_cleanup() frees npinfo and returns
while ->tx_work is pending.

No?

Oleg.


^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2007-07-04  7:13 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-07-01 17:35 [NETPOLL] netconsole: fix soft lockup when removing module Oleg Nesterov
2007-07-02  6:34 ` Jarek Poplawski
2007-07-02  9:24   ` Oleg Nesterov
2007-07-02 11:08     ` Jarek Poplawski
2007-07-02  7:52 ` [PATCH] " Jarek Poplawski
2007-07-02  8:59   ` Oleg Nesterov
2007-07-02 10:12     ` [PATCH 2/2][NETPOLL] netconsole: delete flush_scheduled_work Jarek Poplawski
2007-07-04  6:41   ` [PATCH] Re: [NETPOLL] netconsole: fix soft lockup when removing module Jarek Poplawski
2007-07-04  6:47     ` David Miller
2007-07-04  7:08       ` Jarek Poplawski
2007-07-04  7:21     ` Jarek Poplawski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox