netdev
[Top] [All Lists]

Re: [PATCH] PKT_SCHED: Initialize list field in dummy qdiscs

To: Thomas Graf <tgraf@xxxxxxx>
Subject: Re: [PATCH] PKT_SCHED: Initialize list field in dummy qdiscs
From: Patrick McHardy <kaber@xxxxxxxxx>
Date: Sat, 06 Nov 2004 02:47:44 +0100
Cc: davem@xxxxxxxxxxxxx, netdev@xxxxxxxxxxx, spam@xxxxxxxxxxxxx, kuznet@xxxxxxxxxxxxx, jmorris@xxxxxxxxxx
In-reply-to: <20041106011843.GI12289@xxxxxxxxxxxxxx>
References: <418B4C7C.8000402@xxxxxxxxxxxxx> <20041105115430.GP19714@xxxxxxxxxxxxxx> <418B4C7C.8000402@xxxxxxxxxxxxx> <20041105141640.GQ19714@xxxxxxxxxxxxxx> <418BA66A.60804@xxxxxxxxx> <20041105163951.GY12289@xxxxxxxxxxxxxx> <418BB7D2.6060908@xxxxxxxxx> <20041105175812.GZ12289@xxxxxxxxxxxxxx> <418BC40E.8080402@xxxxxxxxx> <20041105194303.GA12289@xxxxxxxxxxxxxx> <20041106011843.GI12289@xxxxxxxxxxxxxx>
Sender: netdev-bounce@xxxxxxxxxxx
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.3) Gecko/20041008 Debian/1.7.3-5
Thomas Graf wrote:

I think I've found the problem and it sounds to banal to be true.
qdisc_destroy uses list_del when it used to use a manual list
management which would not interfer any list walkers.

Nice work, I was really beginning to wonder. There's not that
much that touches qdisc_list :)

the list
walkers are not protected on UP systems, that's why it was
impossible to trigger it for me with SMP enabled. So a qdisc_list
walker such as qdisc_lookup could have its next pointer overwritten
with LIST_POISON1 while walking if qdisc_destroy is called in between?
It sounds so right but on the other hand all the callers except
dev_shutdown should be serialized with any of the list walkers by the
rtnl sempaphore.

The __qdisc_destroy rcu-callback is called in softirq context, when
destroying a classful qdisc the qdisc destroy function might call
qdisc_destroy again for an inner class.

I guess I'm missing that little bit of experience but it would
help to use _rcu list variantes, would it?

Yes. Are you going to send a patch ?

Regards
Patrick

<Prev in Thread] Current Thread [Next in Thread>