Subject: Re: [PATCH] PKT_SCHED: Fix double locking in tcindex destroy path

From: "David S. Miller" <[email-masked]>
Date: Mon, 20 Dec 2004 15:36:24 -0800

On Fri, 10 Dec 2004 13:44:45 +0100
Thomas Graf <[email-masked]> wrote:

> * Patrick McHardy <[email-masked]> 2004-12-10 03:35
> > Thomas Graf wrote:
> > 
> > >tcindex's destroy uses its own delete functions to destroy its
> > >configuration. The delete function (correctly) takes the qdisc_tree_lock
> > >to prevent list walkings from happening while removing from the list.
> > >The qdisc_tree_lock is already held if we're comming via the destroy
> > >path and thus a double locking takes place.
> > >
> > >Patch not needed for 2.4 since both destroy paths are unlocked but will
> > >be needed if we add them.
> > > 
> > >
> > Looks correct, but 2.4 does need this. qdisc_destroy in 2.4 always
> > happens under dev->queue_lock. For example dev_shutdown from 2.4:
> 
> Not 100% correct since cls_api.c drops the lock before calling
> tcf_destroy but the patch is indeed needed and it's not a problem
> if dev->queue_lock is not taken since it is already unlinked as you
> correctly stated in your previous mail. Thanks Patrick.
> 
> Patch also applies to 2.4 with some fuzz.
> 
> Signed-off-by: Thomas Graf <[email-masked]>

I think the conditional locking is quite ugly, but I can't
suggest something better at this time.

Patch applied to both 2.4.x and 2.6.x, thanks Patrick
and Thomas.