Messages in this thread | | | Date | Mon, 11 Dec 2000 00:14:34 +1100 | From | Andrew Morton <> | Subject | Re: [patch] hotplug fixes |
| |
David Woodhouse wrote: > > On Sun, 10 Dec 2000, Andrew Morton wrote: > > > - PCMCIA layer calls call_usermodehelper from within keventd. But > > call_usermodehelper blocks until keventd has run the helper! Duh. > > > > This patch special-cases the situation where keventd is calling > > call_usermodehelper(). > > + if (current_is_keventd()) { > + /* We can't wait on keventd! */ > + __call_usermodehelper(&sub_info); > + } else { > + schedule_task(&tqs); > + down(&sem); /* Wait until keventd has started the subprocess */ > + } > > That's sick. Do we have to? The PCMCIA coded obviously wants an async > call_usermodehelper() or it wouldn't have been using schedule_task() > for it in the first place, would it? Can't we pass an 'int async' arg to > call_usermodehelper() instead of doing it this way?
Well, call_usermodehelper here _is_ async. We're just waiting for acknowledgement that the subprocess has safely taken copies of our local data (argv, envp, etc). And waiting to pick up the return value from execve().
We can't call schedule_task() and then just return from call_usermodehelper(), unless we take kmalloced copies of everything (including the tq_struct) and then free them after the vfork. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
| |