On Mon, Feb 13, 2023 at 10:24:13AM +0100, Peter Zijlstra wrote: > On Sun, Feb 12, 2023 at 10:23:44AM -0500, Alan Stern wrote: > > Provided it acquires the parent device's lock first, this is > > utterly safe no matter what order the children are locked in. Try > > telling that to lockdep! > > mutex_lock_next_lock(child->lock, parent->lock) is there to express this > exact pattern, it allows taking multiple child->lock class locks (in any > order) provided parent->lock is held. Perhaps I'm stupid, but I've never understood how subclasses - or this - are supposed to work. Locks don't get a fixed subclass, so what's to prevent some code from going /* thread 1: */ mutex_lock(&a->lock); mutex_lock_nested(&b->lock, 1); /* thread 2: */ mutex_lock(&b->lock); mutex_lock_nested(&a->lock, 1); I don't see how they can be used to check that we're obeying a lock ordering?