Messages in this thread | | | From | Linus Torvalds <> | Date | Sat, 30 Jun 2018 19:18:58 -0700 | Subject | Re: [PATCH 2/2] drivers: core: Remove glue dirs from sysfs earlier |
| |
On Sat, Jun 30, 2018 at 7:07 PM Linus Torvalds <torvalds@linux-foundation.org> wrote: > > Those locks won't protect kobj races in _general_ (ie there is no > locking between two totally unrelated buses), but they *should* > serialize the case of a device being added within one class. No?
Side note: there had *better* be some locking whenever there is a way to find an object, because otherwise you have a fundamental lifetime problem: one thread finding the object at the same time another thread frees it for the last time. Even the "unless_zero()" won't fix it, because the final free will release the underlying object itself, so the "zero" state is ephemeral.
That locking might be just RCU during lookup, and rcu-delaying the release, of course. I think that's all the sysfs code needs, for example, since that's what lookup uses.
And for any other embedded kobj cases, where you can reach the object using some random subsystem pointers, there had better be other locking in place for that pointer lookup vs the last removal.
kobject itself doesn't provide that locking, it only provides the reference counting. But that's partly why it really has to disallow any kobject_get() of a zero object, because it means that the tear-down has been started, but the tear-down itself may not have had time to get the lock yet (ie kobject_release() may be just about to call the t->release() function).
But maybe I'm missing something subtle.
Linus
| |