On Thu, 31 May 2007 01:01:37 +0400 Oleg Nesterov <[EMAIL PROTECTED]> wrote:
> Jason Wessel wrote: > > > > The netpoll_cleanup handler can hang the kernel if there is no work in the > > work queue because a call to cancel_rearming_delayed_work() with no work > > goes into an infinite loop. > > This should not be true any longer, cancel_rearming_delayed_work() should work > correctly in any case. > > Could you please clarify? We need a 2.6.21.x fix. > > @@ -771,30 +771,32 @@ void netpoll_cleanup(struct netpoll *np) > > > > [...snip...] > > > > + if (atomic_dec_and_test(&npinfo->refcnt)) { > > + skb_queue_purge(&npinfo->arp_tx); > > + skb_queue_purge(&npinfo->txq); > > + if (delayed_work_pending(&npinfo->tx_work)) { > > cancel_rearming_delayed_work(&npinfo->tx_work); > > flush_scheduled_work(); > > But this "if (delayed_work_pending())" is racy anyway? > I guess so, a bit. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/