[PATCH] init: allow early inittab reload
Denys Vlasenko
vda.linux at googlemail.com
Sun Nov 15 02:06:15 UTC 2009
On Monday 09 November 2009 02:55, Magnus Damm wrote:
> On Sat, Nov 7, 2009 at 12:37 PM, Denys Vlasenko
> <vda.linux at googlemail.com> wrote:
> > On Friday 06 November 2009 07:19, Magnus Damm wrote:
> >> From: Magnus Damm <damm at opensource.se>
> >>
> >> Modify the init applet to take note of SIGHUP received during
> >> early boot at SYSINIT or from hotplugging mdev scripts. Without
> >> this patch SIGHUP is ignored and the inittab is never reloaded.
> >>
> >> Useful for systems that add inittab entries from the mdev script
> >> and reload the initttab to spawn off gettys on hotplugged devices
> >> such as USB serial adapters.
> >
> > Code was:
> >
> > /* Now run everything that needs to be run */
> > /* First run the sysinit command */
> > run_actions(SYSINIT);
> > check_delayed_sigs();
> > /* Next run anything that wants to block */
> > run_actions(WAIT);
> > check_delayed_sigs();
> > /* Next run anything to be run only once */
> > run_actions(ONCE);
> >
> > /* Set up "reread /etc/inittab" handler.
> > * Handler is set up without SA_RESTART, it will interrupt syscalls.
> > */
> > if (!DEBUG_INIT && ENABLE_FEATURE_USE_INITTAB)
> > bb_signals_recursive_norestart((1 << SIGHUP), record_signo);
> >
> > You move code which installs SIGHUP handler up, to the top
> > of this fragment.
>
> Exactly.
>
> > With new code:
> >
> > If SIGHUP is caught, check_delayed_sigs() will detect it
> > ad call reload_inittab(). It removes all old entries,
> > and also all ONCE, SYSINIT and WAIT entries
> > (even if they come from the new iniitab), and (optionally)
> > kills any running processes resulted from old entries.
> >
> > In other words:
> > if inittab is reloaded by any SYSINIT, WAIT, or ONCE process,
> > all remaining SYSINIT, WAIT, or ONCE entries are ignored,
> > both from old and a new inittab.
> >
> > This was confusing users in the past.
>
> That's very understandable. =)
>
> > Where do you run "mdev -s" so that it wants to reload inittab?
> > As part of SYSINIT? When iniitab is reloaded, what
> > stage do you expect init to enter? Back to SYSINIT?
> > Continue with WAIT? or what?
>
> I let the kernel hotplug handler point to mdev, and I have a line in
> /etc/mdev.conf that executes a shell script which modifies the inittab
> and asks init to reload using "kill -HUP 1".
>
> In more detail, the shell script simply extends the inittab with a
> respawn getty login line for the recently added serial device. The
> hotplug event can happen at any time basically, but on my system it
> usually happens sometime during the SYSINIT phase. Today the inittab
> is never reloaded and that's the issue that the patch was trying to
> resolve.
>
> Ideally I'd like the rest of the system to stay the same during the
> hotplugging, ie no processes killed.
Please test attached patch.
--
vda
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 9.patch
Type: text/x-diff
Size: 3204 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/busybox/attachments/20091115/eb27109e/attachment-0001.bin>
More information about the busybox
mailing list