[PATCH] sysfs: Add lockdep annotations for the sysfs active reference
Dominik Brodowski
linux at dominikbrodowski.net
Sun Jan 17 13:03:51 EST 2010
Hey,
On Sun, Jan 17, 2010 at 09:18:34AM -0800, Eric W. Biederman wrote:
> Ming Lei <tom.leiming at gmail.com> writes:
>
> > On Sat, 02 Jan 2010 13:37:12 -0800
> > ebiederm at xmission.com (Eric W. Biederman) wrote:
> >
> >>
> >> Holding locks over device_del -> kobject_del -> sysfs_deactivate can
> >> cause deadlocks if those same locks are grabbed in sysfs show or store
> >> methods.
> >>
> >> The I model s_active count + completion as a sleeping read/write lock.
> >> I describe to lockdep sysfs_get_active as a read_trylock,
> >> sysfs_put_active as a read_unlock, and sysfs_deactivate as a
> >> write_lock and write_unlock pair. This seems to capture the essence
> >> for purposes of finding deadlocks, and in my testing gives finds real
> >> issues and ignores non-issues.
> >>
> >> This brings us back to holding locks over kobject_del is a problem
> >> that ideally we should find a way of addressing, but at least lockdep
> >> can tell us about the problems instead of requiring developers to
> >> debug rare strange system deadlocks, that happen when sysfs files are
> >> removed while being written to.
> >
> > The model has hit a possible deadlock in pcmcia, and the lockdep warning
> > comes when I unplug my wlan card from pcmcia slot.
> >
> > Looks like socket->skt_mutex is held in remove path, and it is also
> > grabbed in .stor method.
>
>
> Looking a little closer this is simultaneously a legitimate problem
> and also a false positive.
>
> This is only legitimate if you add/remove a cardbus bridge, plugged into
> another cardbus bridge, which I think is unlikely but physically possible.
Unfortunately, it is not a false positive, as removing a PCMCIA device
racing with "pccardctl eject" seems to trigger this path as well. Patch is
being prepared...
Best,
Dominik
More information about the linux-pcmcia
mailing list