Re: [PATCH 25/20] sysfs: Only support removing emtpy sysfs directories.

Eric W. Biederman
2009-05-27T22:06:27Z

Alan Stern <stern@rowland.harvard.edu> writes:

> On Wed, 27 May 2009, Eric W. Biederman wrote:
>
>> Alan Stern <stern@rowland.harvard.edu> writes:
>>
>> >
>> > As fas as I know, they can't. Instead, they can cause the SCSI layer
>> > to unregister a sysfs directory containing a child directory. :-)
>> >
>> > Basically, a user program can delay removal of the child (i.e., the
>> > target) directory indefinitely, because currently the target isn't
>> > unregistered when all its children are removed -- it's unregistered
>> > when all its children are _released_.
>>
>> Ok. Is this opens of /dev/sda1 and the like that are being held open by
>> userspace that are potentially causing problems?
>
> Yes, plus any other mechanism for preventing a struct device's refcount
> from going to 0.

Thanks. The discussion makes sense now.

>> I think I have the fix to that...
>
> The fix is to delete the target when its children are deleted, and not
> wait until the children are released.

I think I can do both.

I am currently working on a patchset which at the VFS layer disconnects a
fd from an underlying device. It does the necessary use count tracking
and when the disconnect is done it returns. As part of the disconnect it
calls the release method.

We already do this in at least sysfs, proc, sysctl, and sound. So I
figure it is time to move this into some generic code so we don't need
to duplicate the bugs and the insanities.

Once merged it would take just a few lines of code to use this functionality.

Eric