Bug 30315 - race conditions during media detection
Summary: race conditions during media detection
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: propagator (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Michael Shigorin
QA Contact: qa-sisyphus
URL:
Keywords: usability
: 29140 (view as bug list)
Depends on:
Blocks: 27685
  Show dependency tree
 
Reported: 2014-09-14 22:50 MSK by Michael Shigorin
Modified: 2017-12-08 21:26 MSK (History)
10 users (show)

See Also:


Attachments
снимок экрана в "хорошем" случае (13.80 KB, image/png)
2014-09-14 22:50 MSK, Michael Shigorin
no flags Details
фрагмент dmesg в "плохом" случае (8.04 KB, text/plain)
2014-09-14 22:52 MSK, Michael Shigorin
no flags Details
Окно выбора носителя (62.88 KB, image/jpeg)
2017-02-09 07:56 MSK, Daniil Golovanov
no flags Details
Окно выбора раздела (68.71 KB, image/jpeg)
2017-02-09 07:56 MSK, Daniil Golovanov
no flags Details
Окно ввода пути к образу (66.07 KB, image/jpeg)
2017-02-09 07:57 MSK, Daniil Golovanov
no flags Details
Два исправления, включая поддержку MMC (2.47 KB, patch)
2017-10-20 19:44 MSK, Leonid Krivoshein
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Shigorin 2014-09-14 22:50:02 MSK
Created attachment 6142 [details]
снимок экрана в "хорошем" случае

Как известно, в нашем propagator живут гонки; одна из них проявляется как порой воспроизводящийся "waiting for /dev/disk", уходящий до лимита в 59 секунд; вторая -- как вываливание в диалог выбора носителя при загрузке с флэшки.

Экспериментально выяснено, что стартеркиты 20140312 и 20140912 ведут себя в плане второй гонки одинаково, при этом вероятность её поймать в моём тесте на трёх флэшках (USB3, ~70Mb/s; USB2, ~16MB/s; USB2, ~8 MB/s) выглядит примерно как 3/3; 2/3; 1/3 (при этом и на быстрой флэшке раз из нескольких всё-таки удаётся загрузиться "на автомате").

Различие в логе на tty3 при случаях "грузимся" и "не грузимся" наблюдается в том, сколько записей о носителях _перед_ попытками их монтирования выдано:

SCSI/1: sda is что_там_за_HDD => не успели

SCSI/1: sda is <hdd>
SCSI/1: sdb is <флэшка> => успели

вариант для CD-ROM:

SCSI/1: sda is <hdd>
SCSI/0: sr0 is <cdrom>

Судя по dmesg в "плохом" случае, разница между sda (hdd) и sdb (flash) может быть в пару секунд.  Возможно, в cdrom.c::cdrom_prepare() есть смысл попытаться взять паузу и сходить на второй/третий круг до того, как вываливаться из автоматического режима.
Comment 1 Michael Shigorin 2014-09-14 22:52:56 MSK
Created attachment 6143 [details]
фрагмент dmesg в "плохом" случае
Comment 2 Michael Shigorin 2014-12-18 23:02:12 MSK
Вот исправление (спасибо ldv@):
http://git.altlinux.org/people/mike/packages/?p=propagator.git;a=commitdiff;h=542567af7b09e4e5d78f85cfb7d48c7ab489b6a8

Желающие приглашаются к тестированию, результат надо будет положить и в бранчи.
Comment 3 Michael Shigorin 2014-12-19 16:01:22 MSK
Это блокер bug #27685, надо протестировать и поместить в p7 до 7.0.5.
Comment 4 Repository Robot 2014-12-22 23:56:44 MSK
propagator-20141217-alt1 -> sisyphus:

* Wed Dec 17 2014 Michael Shigorin <mike@altlinux> 20141217-alt1
- ldv@'s workaround for media detection race condition (closes: #30315)
Comment 5 Michael Shigorin 2015-01-13 17:32:01 MSK
*** Bug 29140 has been marked as a duplicate of this bug. ***
Comment 6 Michael Shigorin 2015-03-09 22:54:20 MSK
На самом деле проблема не исправлена полностью даже с propagator-20150306-alt1, т.к. причина её явно в параллельно-расистом характере udev; ещё один пинок в виде udevadm trigger (возможно, будет -c add) добавлен в make-initrd-propagator -- но похоже на то, что придётся в цикл "waiting for /dev/disk" добавить пинок в trigger каждые 5--10 секунд (по крайней мере при столкновении с такой ситуацией это на tty2 помогает).
Comment 7 Michael Shigorin 2015-03-10 02:37:04 MSK
Вот с этим патчем пока не получается поймать тот race condition:
http://git.altlinux.org/gears/p/propagator.git?p=propagator.git;a=commitdiff;h=ce7dbcef2b00e29fbe7c1318561d93ec07b4fe20
Comment 8 Michael Shigorin 2016-02-15 21:18:34 MSK
Туда же:
https://vk.com/wall-667081_9954 (7.0.5, там ещё не было исправлено)
https://vk.com/topic-16711511_33346654 (регулярка, неясно)
Comment 9 Michael Shigorin 2016-10-24 21:57:34 MSK
Опять напоролся.  Посмотрел внимательней на disk.c, вкостылил в 20161024-alt2
двухсекундную паузу и повтор попытки найти ФС в /dev/disk/by-label/ по результатам наблюдений за флэшками при загрузке (на синей альтовой довольно
устойчиво наблюдается эффект "ro, rw, ro => проиграли гонку").

С этим костылём мне пока не удалось воспроизвести проблему на четырёх сильно разных по скорости флэшках (быстрая/медленная * USB2/USB3).

PS: вообще надо бы выкинуть из gfxboot тот хак с перекостыливанием метода --
он сейчас больше мешает, а cdrom.c давно обучен всему нужному для флэшек.
Comment 10 Anton Farygin 2016-10-25 10:53:03 MSK
Миша, я тебе предлагаю подумать над реализацией поиска флешек в отдельном потоке на основании данных от udev.

В этом случае можно было бы реализовать схему, когда пропагатор идёт дальше после появления загрузочного устройства.

Ещё. вместо параллельного потока можно вывести сообщение <Waiting for boot device> с кнопкой Cancel, и крутить в цикле поиск нужного устройства.
Comment 11 Sergey V Turchin 2016-10-25 11:57:43 MSK
(В ответ на комментарий №10)
> Ещё. вместо параллельного потока можно вывести сообщение <Waiting for boot
> device> с кнопкой Cancel, и крутить в цикле поиск нужного устройства.
Bootsplash желательно без действительной необходимости не трогать, иначе он у нас никогда не будет без разрывов.
Comment 12 Michael Shigorin 2016-10-25 17:40:00 MSK
(В ответ на комментарий №10)
> Миша, я тебе предлагаю подумать над реализацией [...]
legion@ давно предлагал заменить propagator на небольшой шелл-скрипт. :)

Как только что обсудили с boyarsh@ -- вместо sleep(2) и двух попыток вокруг лучше хотя бы сделать десятикратный цикл с минимум одной попыткой запуска try_with_uuidlabel().
Comment 13 Anton Farygin 2016-10-25 18:39:07 MSK
А чем тебе не нравится идея с вечным циклом, прерываемым пользователем ?

Что касается шелл скрипта, то функциональность пропагатора только кажется маленькой. Скрипт будет большой.
Comment 14 Daniil Golovanov 2017-02-09 07:45:01 MSK
Образ: alt-kworkstation-8.1-install-x86_64.iso
Образ: alt-kworkstation-8.1-install-i586.iso
USB-Flash: Transcend 4Gb
Программа записи: imagewriter-1.10-alt4
Системная плата: ASUS H81M-K
HDD: TOSHIBA DT01ACA1 931Gb
В BIOS выставлена загрузка с устройств Legacy.
При загрузке с флэшки после выбора в меню Grub опции "LiveCD" или "Установка"
выводится псевдографическое окно "Please choose..." с предложением выбора носителя из подключенных носителей:
см. 1.Choose the boot disk drive.jpg
Выбираю sdb (Transcend 4Gb)
Затем выводится псевдографическое окно "Please choose..." с предложением выбора раздела из имеющихся на выбранном носителе:
см. 2. Choose the partition.jpg
Выбираю sdb1 (size 3585 Mbytes)
Потом выводится псевдографическое окно "Please fill entries..." с вводом пути к образу:
см. 3. Enter the directory.jpg
Выбираю "Ок" без ввода данных
Далее загрузка с флэшки проходит до рабочего стола без ошибок.
Данная ситуация аналогично воспроизводится на нетбуке ASUS X101CH.
Comment 15 Daniil Golovanov 2017-02-09 07:56:18 MSK
Created attachment 6963 [details]
Окно выбора носителя
Comment 16 Daniil Golovanov 2017-02-09 07:56:44 MSK
Created attachment 6964 [details]
Окно выбора раздела
Comment 17 Daniil Golovanov 2017-02-09 07:57:16 MSK
Created attachment 6965 [details]
Окно ввода пути к образу
Comment 18 Daniil Golovanov 2017-02-09 08:22:35 MSK
Прошу переоткрыть баг по причине стабильного его воспроизведения.
Comment 19 Daniil Golovanov 2017-02-09 08:33:33 MSK
Также о данной проблеме сообщают пользователи на форуме:
https://forum.altlinux.org/index.php?topic=37785.0
https://forum.altlinux.org/index.php?topic=38274.msg305759#msg305759
Comment 20 ruslandh 2017-02-09 09:01:30 MSK
Собственно переоткрываю.
Comment 21 Michael Shigorin 2017-09-22 15:49:32 MSK
Угу, пишут, что актуально для крабочей станции 8.2:
http://www.opennet.ru/openforum/vsluhforumID3/112310.html#108
Comment 22 Alexey Vissarionov 2017-10-09 12:28:37 MSK
Метод лечения:

CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_PCI=y
CONFIG_USB_OHCI_HCD_PCI=y
CONFIG_USB_OHCI_HCD=y
CONFIG_USB_UHCI_HCD=y
CONFIG_USB_XHCI_HCD=y
CONFIG_USB_XHCI_PCI=y
CONFIG_USB_STORAGE=y
CONFIG_CMDLINE_BOOL=y
CONFIG_CMDLINE="panic=30 rootdelay=10"

Я таких секретных аппаратнозависимых настроек много знаю... обращайтесь, если что.
Comment 23 Leonid Krivoshein 2017-10-20 19:41:44 MSK
Если LiveCD-образ скопирован на MMC, видим те же страшные сообщения. Исправляется включением поддержки MMC в propagator. Проверил патч на P8 -- работает.
Comment 24 Anton Farygin 2017-10-20 19:43:03 MSK
Какой патч проверил на P8 ?
Comment 25 Leonid Krivoshein 2017-10-20 19:44:34 MSK
Created attachment 7240 [details]
Два исправления, включая поддержку MMC
Comment 26 Leonid Krivoshein 2017-10-20 19:53:49 MSK
(В ответ на комментарий №24)
> Какой патч проверил на P8 ?

Вы так быстро отреагировали, я ещё даже патчик приатачить не успел> :) См. выше...
Comment 27 Anton Farygin 2017-10-20 19:54:48 MSK
Да, отлично. Но эта ошибка немного не о том.
Надо перерабатывать архитектуру propagator к следующей версии.
Comment 28 Leonid Krivoshein 2017-10-20 20:05:25 MSK
(В ответ на комментарий №27)
> эта ошибка немного не о том.
Да, но проявления похожие, хотя причины другие. Чтобы наработка не потерялась, Михаил Шигорин предложил выложить сюда. Согласен, что остальные проблемы, вызванные udevsettle, этот патч не закроет.

> Надо перерабатывать архитектуру propagator к следующей версии.
Вообще-то да. Собственно он и не особо нужен.
Comment 29 Anton Farygin 2017-10-20 20:10:23 MSK
Патч выглядит нормальным, можно в сизиф отправить.

Что касается "не особо нужен" - тут вопрос спорный, всё равно нужен кто-то, умеющий то, что делает propagator.

А умеет он слишком много.
Comment 30 Leonid Krivoshein 2017-10-20 20:19:08 MSK
(В ответ на комментарий №29)
> нужен кто-то, умеющий то, что делает propagator.

Не хватающий функционал пропагатора имеет смысл перетащить в make-initrd, IMHO. Я ещё не приложил скриншоты багов пропагатора -- это явно следствие не очень аккуратного кодирования на си. В столь ответственном месте, которое под задачи часто приходится дотачивать, скрипт и надёжнее, и полезнее, благо в initrd большая часть того же функционала уже имеется.
Comment 31 Michael Shigorin 2017-12-06 19:29:12 MSK
(В ответ на комментарий №23)
> Если LiveCD-образ скопирован на MMC, видим те же страшные сообщения.
Это другое (#32171, #30239); просьба НЕ устраивать здесь мультибаг,
а повесить новый с обсуждением того, что от propagator требуется
и кто как собирается его переписывать (возможно, CC: legion@).
Comment 32 Leonid Krivoshein 2017-12-07 01:15:40 MSK
(В ответ на комментарий №31)
>> Если LiveCD-образ скопирован на MMC, видим те же страшные сообщения.
> Это другое (#32171, #30239)

К #30315 больше подходит по выводимым сообщениям, конечно причина другая. К двум перечисленным не подходит однозначно, потому что в моём случае, как и здесь, MMC выступает в качестве source, а там в качестве target, к тому же тут речь о пропагаторе, а там о evms и инсталляторе. Обсуждение же хотелок и судьбы пропагатора - да, наверное лучше вообще вынести в devel@.
Comment 33 Repository Robot 2017-12-08 21:26:37 MSK
propagator-20171208-alt1 -> sisyphus:

Fri Dec 08 2017 Mikhail Efremov <sem@altlinux> 20171208-alt1
- probing.c: added support for MMC devices when boot in LiveCD-mode
  (by Leonid Krivoshein).
- cdrom.c: fixed implicit declaration of function opendir warning
  (by Leonid Krivoshein).
- disk.c: Workaround race conditions during disks detection
  (closes: #30315).
- cdrom.c, network.c, tools.c: Fix memory leaks.
- tools.c: Don't do useless comparisons during cmdline processing.
- Use ramdisk_size from kernel cmdline.
- Check that RAM size is enough for ramdisk.