#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

Reply via email to