lkml.org 
[lkml]   [2012]   [Jan]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: Sysfs attributes racing with unregistration
On Wed, 4 Jan 2012, Tejun Heo wrote:

> Hello, Alan.
>
> On Wed, Jan 04, 2012 at 11:52:20AM -0500, Alan Stern wrote:
> > Can you explain the current situation regarding access to sysfs
> > attributes and possible races with kobject removal? I have two
> > questions in particular:
>
> Heh, I haven't looked at sysfs code seriously for years now and my
> memory sucks to begin with, so please take whatever I say with a
> gigantic grain of salt. Eric has been looking at sysfs a lot lately
> so he probably can answer these best. Adding him, Greg and Kay - hi!
> guys.
>
> > What happens if one thread calls an attribute's show or
> > store method concurrently with another thread unregistering
> > the underlying kobject?
>
> sysfs nodes have two reference counts - one for object lifespan and
> the other for active usage. The latter is called active and acquired
> and released using sysfs_get/put_active(). Any callback invocation
> should be performed while holding an active reference. On removal,
> sysfs_deactivate() marks the active reference count for deactivation
> so that no new active reference is given out and waits for the
> in-flight ones to drain. IOW, removal makes sure new invocations of
> callbacks fail and waits for in-progress ones to finish before
> proceeding with removal.
>
> > What happens if a thread continues to hold an open fd
> > reference to a sysfs attribute file after the kobject is
> > unregistered, and then tries to read or write that fd?
>
> Active reference is held only for the duration of each callback
> invocation. Userland can't prolong the existence of active reference.
> The duration of callback execution is the only deciding factor.
>
> Someone (I think Eric, right?) was trying to generalize the semantics
> to vfs layer so that severance/revocation capability is generally
> available. IIRC, it didn't get through tho.

That's great; it's just what I wanted to know. Thanks.

Now, looking through the code, I wonder why sysfs_{get,put}_active()
and sysfs_deactivate() don't use a real rwsem. Why go to all the
effort of imitating one? Is it just to save space?

Alan Stern



\
 
 \ /
  Last update: 2012-01-04 19:15    [W:0.043 / U:0.608 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site