#22098: procd can not change state from STATE_INIT to STATE_RUNNING causing
reboot
failed
---------------------------+---------------------------------
Reporter: winsonoreo@… | Owner: developers
Type: defect | Status: new
Priority: high | Milestone:
Component: base system | Version: Chaos Calmer 15.05
Resolution: | Keywords: procd, fork, reboot
---------------------------+---------------------------------
Old description:
> During system boot up, procd failed to change from STATE_INIT to
> STATE_RUNNING leading to reboot failed.
> By adding some debug output, when this happened, it turns out that in
> function q_initd_run(), fork() may failed, and the errno is 89.
> Digging in kernel function do_fork(), it failed in copy_process()
>
> ...
> /*
> * Process group and session signals need to be delivered to just the
> * parent before the fork or both the parent and the child after the
> * fork. Restart if a signal comes in before we add the new process
> to
> * it's process group.
> * A fatal signal pending means that current will exit, so the new
> * thread can't slip out of an OOM kill (or normal SIGKILL).
> */
> recalc_sigpending();
> if (signal_pending(current)) {
> spin_unlock(¤t->sighand->siglock);
> write_unlock_irq(&tasklist_lock);
> retval = -ERESTARTNOINTR;
> goto bad_fork_free_pid;
> }
> ...
>
> kernel version is 2.6.36 and arch is mips, I reproduce it by rebooting
> the system.
New description:
During system boot up, procd failed to change from STATE_INIT to
STATE_RUNNING leading to reboot failed.
By adding some debug output, when this happened, it turns out that in
function q_initd_run(), fork() may failed, and the errno is 89.
Digging in kernel function do_fork(), it failed in copy_process()
{{{
...
/*
* Process group and session signals need to be delivered to just the
* parent before the fork or both the parent and the child after the
* fork. Restart if a signal comes in before we add the new process to
* it's process group.
* A fatal signal pending means that current will exit, so the new
* thread can't slip out of an OOM kill (or normal SIGKILL).
*/
recalc_sigpending();
if (signal_pending(current)) {
spin_unlock(¤t->sighand->siglock);
write_unlock_irq(&tasklist_lock);
retval = -ERESTARTNOINTR;
goto bad_fork_free_pid;
}
...
}}}
kernel version is 2.6.36 and arch is mips, I reproduce it by rebooting the
system.
--
Comment (by hauke):
kernel version 2.6.36? Do you see the same problems with a not so ancient
kernel? What fork of OpenWrt are you running?
--
Ticket URL: <https://dev.openwrt.org/ticket/22098#comment:1>
OpenWrt <http://openwrt.org>
Opensource Wireless Router Technology
_______________________________________________
openwrt-tickets mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-tickets