Re: BUG: MAX_LOCKDEP_CHAINS too low!

From: Taehee Yoo
Date: Thu Jan 16 2020 - 10:33:11 EST


On Thu, 16 Jan 2020 at 14:25, Dmitry Vyukov <dvyukov@xxxxxxxxxx> wrote:
>

Hi Dmitry!

> On Wed, Jan 15, 2020 at 10:53 PM Cong Wang <xiyou.wangcong@xxxxxxxxx> wrote:
> > > +Taehee, Cong,
> > >
> > > In the other thread Taehee mentioned the creation of dynamic keys for
> > > net devices that was added recently and that they are subject to some
> > > limits.
> > > syzkaller creates lots of net devices for isolation (several dozens
> > > per test process, but then these can be created and destroyed
> > > periodically). I wonder if it's the root cause of the lockdep limits
> > > problems?
> >
> > Very possibly. In current code base, there are 4 lockdep keys
> > per netdev:
> >
> > struct lock_class_key qdisc_tx_busylock_key;
> > struct lock_class_key qdisc_running_key;
> > struct lock_class_key qdisc_xmit_lock_key;
> > struct lock_class_key addr_list_lock_key;
> >
> > so the number of lockdep keys is at least 4x number of network
> > devices.
>
> And these are not freed/reused, right? So with dynamic keys LOCKDEP
> inherently can't handle prolonged running, only O(1) work?

When netdev interface is removed, these dynamic keys are removed.
But if so many netdev interfaces are existing concurrently
(more than 2000), lockdep will stop because of a lack of keys.
In addition, as far as I know, freeing dynamic lockdep key routine is
slower than creating a new dynamic lockdep key. If there are so many
netdev interface add/delete operations, for a while, there may be no
available lockdep key. At this moment, lockdep will stop.

Thank you
Taehee Yoo