Bug 30355

Summary: Зависает со 100% CPU при изменении статуса линка
Product: Sisyphus Reporter: Vitaly Lipatov <lav>
Component: dhcpcdAssignee: Mikhail Efremov <sem>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: normal    
Priority: P3 CC: anton, glebfm, mike, pv, rider, sem
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 30369    
Bug Blocks:    

Description Vitaly Lipatov 2014-09-26 16:20:31 MSK
Мигал свет и перегружался коммутатор:
Sep 26 15:44:13 lav kernel: [660207.010735] r8169 0000:02:00.0 eth0: link down
Sep 26 15:44:18 lav kernel: [660212.234747] r8169 0000:02:00.0 eth0: link up
Sep 26 15:44:23 lav kernel: [660216.922534] r8169 0000:02:00.0 eth0: link down
Sep 26 15:44:28 lav kernel: [660222.146580] r8169 0000:02:00.0 eth0: link up
Sep 26 15:44:36 lav kernel: [660230.121731] r8169 0000:02:00.0 eth0: link down
Sep 26 15:44:38 lav kernel: [660232.206778] r8169 0000:02:00.0 eth0: link up

После этого процесс зацикливается, при подключении через strace видны бесконечные
ppoll([{fd=7<socket:[266225440]>, events=POLLIN}, {fd=8, events=POLLIN}, {fd=6<socket:[11925]>, events=POLLIN}, {fd=5<socket:[10413]>, events=POLLIN}], 4, {9707, 349083000}, [], 8) = 1 ([{fd=8, revents=POLLNVAL}], left {9707, 349079089})
ppoll([{fd=7<socket:[266225440]>, events=POLLIN}, {fd=8, events=POLLIN}, {fd=6<socket:[11925]>, events=POLLIN}, {fd=5<socket:[10413]>, events=POLLIN}], 4, {9707, 349009000}, [], 8^C) = 1 ([{fd=8, revents=POLLNVAL}], left {9707, 349005089})


backtrace из gdb:
0x0000003d204de721 in __GI_ppoll (fds=0x63a8c0, nfds=4, timeout=0x7fffd14b1d10, sigmask=sigmask@entry=0x7fffd14b1f90)
    at ../sysdeps/unix/sysv/linux/ppoll.c:51
51	    result = INLINE_SYSCALL (ppoll, 5, fds, nfds, timeout, sigmask, _NSIG / 8);
(gdb) bt
#0  0x0000003d204de721 in __GI_ppoll (fds=0x63a8c0, nfds=4, timeout=0x7fffd14b1d10, sigmask=sigmask@entry=0x7fffd14b1f90)
    at ../sysdeps/unix/sysv/linux/ppoll.c:51
#1  0x0000000000406e17 in ppoll (__ss=0x7fffd14b1f90, __timeout=<optimized out>, __nfds=<optimized out>, __fds=<optimized out>)
    at /usr/include/bits/poll2.h:77
#2  eloop_start (dctx=dctx@entry=0x7fffd14b1f90) at eloop.c:374
Comment 1 Vitaly Lipatov 2014-09-26 16:43:29 MSK
Версия последняя из Сизифа: dhcpcd-6.3.1-alt2

При сборке:
Testing for pollts ... no
Testing for ppoll ... yes

В этом режиме в configure POLLTS=ppoll и применяется
#define pollts ppoll

Таким образом вызывается в бесконечном цикле ppoll, который возвращает 1


# ls -l /proc/1732/fd/
итого 0
lrwx------ 1 root root 64 сен 26 16:35 0 -> /dev/null
lrwx------ 1 root root 64 сен 26 16:35 1 -> /dev/null
lrwx------ 1 root root 64 сен 26 16:35 2 -> /dev/null
l-wx------ 1 root root 64 сен 26 16:35 3 -> /var/run/dhcpcd-eth0.pid
lrwx------ 1 root root 64 сен 26 16:35 4 -> socket:[10412]
lrwx------ 1 root root 64 сен 26 16:35 5 -> socket:[10413]
lrwx------ 1 root root 64 сен 26 16:35 6 -> socket:[11925]
lrwx------ 1 root root 64 сен 26 16:35 7 -> socket:[266225440]


Я не смог понять, с кем этот сокет, почему на нём бесконечно событие (мы его не забираем?).
Подозреваю, что с кем-то, кто управляет dhcpcd (systemd?)
Comment 2 Anton Farygin 2014-09-26 17:08:21 MSK
тоже заметил странности с dhcpcd на Sisyphus, с чем связано непонятно, но часто не берёт адрес с WiFI, приходится пинать его через dhcpcd -n <интерфейс>
Comment 3 Mikhail Efremov 2014-09-28 19:26:16 MSK
Для начала надо попробовать последнюю версию dhcpcd, может там проблема уже исправлена. Но для этого потребуются изменения в etcnet (апстрим dhcpcd легко и непринужденно изменил реакцию на сигналы). Я подготовлю патч для etcnet в ближайшее время.
Comment 4 Mikhail Efremov 2014-10-02 18:48:50 MSK
Просьба проверить с dhcpcd-6.4.7-alt1, у меня вроде больше не воспризводится.
Со старым dhcpcd этот баг после link down/up я видел, но не понял как 100% его воспроизвести.
Comment 5 Vitaly Lipatov 2014-10-11 20:15:53 MSK
пакет dhcpcd-6.4.7-alt1
вынул-вставил кабель, всё зависло как и раньше :(
Comment 6 Vitaly Lipatov 2014-10-11 20:21:10 MSK
(В ответ на комментарий №5)
> пакет dhcpcd-6.4.7-alt1
> вынул-вставил кабель, всё зависло как и раньше :(

Думаю, не был перезапущен dhcpcd после обновления. Убил зависший, перезапустил network,теперь всё работает отлично: при потере линка убирает все адреса и маршруты, с ним связанные. Не уверен, что я этого ожидал. Но не виснет.
Comment 7 Anton Farygin 2014-10-12 18:54:15 MSK
а при восстановлении линка возвращает всё обратно ?
Comment 8 Vitaly Lipatov 2014-10-22 22:48:39 MSK
(В ответ на комментарий №7)
> а при восстановлении линка возвращает всё обратно ?
Заново запрашивает и выставляет, что получит.