On Sun, 26 Feb 2012 16:33:25 +0800 "majianpeng" <majianpeng@xxxxxxxxx> wrote: > I wrote a letter to maintainer of procfs. He's answer is follow: > >No. Read remove_proc_entry(), especially the part under ->pde_unload_lock. > >The whole damn point of that stuff is that opened file on procfs does *not* > >pin the module down; IO in progress does, but that's it. > >You can't deadlock rmmod foobar </proc/crap/foobar; with your patch we'll > >be back to a pile of deadlocks in there. > >IOW, NAK. Hmmm... that sounds like Al Viro. I see the point of that code now. And your patch would be open to the same problem wouldn't it. i.e. rmmod md_mod < /proc/mdstat would deadlock?? So we still need to find a fix that actually works correctly. That probably means moving the call to 'poll_wait' into procfs code, and using a wait_queue_head which is managed by procfs. So maybe: - put a wait_queue_head in 'struct proc_dir_entry' - have proc_reg_poll call poll_wait passing that wait_queue_head - write a function e.g. proc_poll_wake which calls wake_up on that wait_queue_head - have md.c save the return value from proc_create, and call the above function instead of calling "wake_up(&md_event_waiters)" That should work. NeilBrown
Attachment:
signature.asc
Description: PGP signature