From: Patrick McHardy <kaber@trash.net>
To: Thomas Graf <tgraf@suug.ch>
Cc: davem@davemloft.net, netdev@oss.sgi.com, spam@crocom.com.pl,
kuznet@ms2.inr.ac.ru, jmorris@redhat.com
Subject: Re: [PATCH] PKT_SCHED: Initialize list field in dummy qdiscs
Date: Fri, 05 Nov 2004 18:26:42 +0100 [thread overview]
Message-ID: <418BB7D2.6060908@trash.net> (raw)
In-Reply-To: <20041105163951.GY12289@postel.suug.ch>
Thomas Graf wrote:
>* Patrick McHardy <418BA66A.60804@trash.net> 2004-11-05 17:12
>
>
>>Nice catch. I can't understand how you triggered that oops,
>>though. The noop- and noqueue-qdiscs used without qdisc_create_*
>>are not refcounted, so I would expect:
>>
>>void qdisc_destroy(struct Qdisc *qdisc)
>>{
>> if (!atomic_dec_and_test(&qdisc->refcnt))
>> return;
>>
>>to underflow and return until refcnt finally reaches 0 again.
>>Can you explain, please ?
>>
>>
>
>Right, this is indeed the case. This doesn't fix the oops reported
>but will prevent the oops you are referring to which was triggerd
>after 2h stress testing on my machine. I haven't had the time to
>check if incrementing the refcnt of builtin qdiscs causes
>any problems but initializing the list is good in any case.
>
>
Either refcnt them or add add some kind of flag to qdiscs created
by qdisc_create/qdisc_create_default and check for that flag.
Initializing the lists doesn't fix all problems, directly using
noop/noqueue doesn't increment the device refcnt, so is must not
be dropped it __qdisc_destroy.
>I found huge locking problems from qidsc_destroy calling contexts though.
>Almost all calling paths to qdisc_destroy invoked from qdiscs are messed up.
>I am resolving those now. I have a theoretical path that could cause the
>reported oops which is htb_put -> htb_destroy_class -> qdisc_destroy
>not bh locking dev->queue_lock and thus the list unlinking could
>take place during a walk/lookup and thus lead to POISON value in the
>next pointer. I could not reproduce this so far though.
>
>
ops->put seems to be safe even without holding dev->queue_lock.
The class refcnt is only changed from userspace, and always under
the rtnl semaphore. get/put are always balanced, so pratically a
class can never get destroyed by put.
Regards
Patrick
next prev parent reply other threads:[~2004-11-05 17:26 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-11-05 9:48 PROBLEM: IProute hangs after running traffic shaping scripts Szymon Miotk
2004-11-05 11:54 ` Thomas Graf
2004-11-05 14:16 ` [PATCH] PKT_SCHED: Initialize list field in dummy qdiscs Thomas Graf
2004-11-05 16:12 ` Patrick McHardy
2004-11-05 16:39 ` Thomas Graf
2004-11-05 17:26 ` Patrick McHardy [this message]
2004-11-05 17:58 ` Thomas Graf
2004-11-05 18:18 ` Patrick McHardy
2004-11-05 19:43 ` Thomas Graf
2004-11-06 1:18 ` Thomas Graf
2004-11-06 1:47 ` Patrick McHardy
2004-11-06 1:59 ` Thomas Graf
2004-11-06 14:50 ` Thomas Graf
2004-11-07 8:57 ` Patrick McHardy
2004-11-07 14:00 ` Thomas Graf
2004-11-07 16:19 ` Patrick McHardy
2004-11-07 16:33 ` Thomas Graf
2004-11-07 17:02 ` Patrick McHardy
2004-11-07 17:49 ` Thomas Graf
2004-11-07 18:22 ` Patrick McHardy
2004-11-07 19:08 ` Thomas Graf
2004-11-06 0:36 ` David S. Miller
2004-11-07 22:22 ` PROBLEM: IProute hangs after running traffic shaping scripts Patrick McHardy
2004-11-08 1:40 ` Patrick McHardy
2004-11-08 13:54 ` Thomas Graf
2004-11-08 16:12 ` Patrick McHardy
2004-11-08 18:33 ` Thomas Graf
2004-11-08 19:46 ` Patrick McHardy
2004-11-08 20:15 ` Thomas Graf
2004-11-10 0:18 ` David S. Miller
2004-11-10 0:40 ` Patrick McHardy
2004-11-10 0:55 ` Patrick McHardy
2004-11-10 6:13 ` David S. Miller
2004-11-10 12:08 ` Szymon Miotk
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=418BB7D2.6060908@trash.net \
--to=kaber@trash.net \
--cc=davem@davemloft.net \
--cc=jmorris@redhat.com \
--cc=kuznet@ms2.inr.ac.ru \
--cc=netdev@oss.sgi.com \
--cc=spam@crocom.com.pl \
--cc=tgraf@suug.ch \
/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.