Bug 30315 - race conditions during media detection
: race conditions during media detection
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/propagator)
: unstable
: all Linux
: P3 normal
Assigned To:
:
:
: usability
:
: 27685
  Show dependency tree
 
Reported: 2014-09-14 22:50 by
Modified: 2017-12-08 21:26 (History)


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


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2014-09-14 22:50:02
Created an attachment (id=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 From 2014-09-14 22:52:56 -------
Created an attachment (id=6143) [details]
фрагмент dmesg в "плохом" случае
------- Comment #2 From 2014-12-18 23:02:12 -------
Вот исправление (спасибо ldv@):
http://git.altlinux.org/people/mike/packages/?p=propagator.git;a=commitdiff;h=542567af7b09e4e5d78f85cfb7d48c7ab489b6a8

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

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

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

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

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

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

Что касается шелл скрипта, то функциональность пропагатора только кажется
маленькой. Скрипт будет большой.
------- Comment #14 From 2017-02-09 07:45:01 -------
Образ: 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 From 2017-02-09 07:56:18 -------
Created an attachment (id=6963) [details]
Окно выбора носителя
------- Comment #16 From 2017-02-09 07:56:44 -------
Created an attachment (id=6964) [details]
Окно выбора раздела
------- Comment #17 From 2017-02-09 07:57:16 -------
Created an attachment (id=6965) [details]
Окно ввода пути к образу
------- Comment #18 From 2017-02-09 08:22:35 -------
Прошу переоткрыть баг по причине стабильного его воспроизведения.
------- Comment #19 From 2017-02-09 08:33:33 -------
Также о данной проблеме сообщают пользователи на форуме:
https://forum.altlinux.org/index.php?topic=37785.0
https://forum.altlinux.org/index.php?topic=38274.msg305759#msg305759
------- Comment #20 From 2017-02-09 09:01:30 -------
Собственно переоткрываю.
------- Comment #21 From 2017-09-22 15:49:32 -------
Угу, пишут, что актуально для крабочей станции 8.2:
http://www.opennet.ru/openforum/vsluhforumID3/112310.html#108
------- Comment #22 From 2017-10-09 12:28:37 -------
Метод лечения:

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 From 2017-10-20 19:41:44 -------
Если LiveCD-образ скопирован на MMC, видим те же страшные сообщения.
Исправляется включением поддержки MMC в propagator. Проверил патч на P8 --
работает.
------- Comment #24 From 2017-10-20 19:43:03 -------
Какой патч проверил на P8 ?
------- Comment #25 From 2017-10-20 19:44:34 -------
Created an attachment (id=7240) [details]
Два исправления, включая поддержку MMC
------- Comment #26 From 2017-10-20 19:53:49 -------
(В ответ на комментарий №24)
> Какой патч проверил на P8 ?

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

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

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

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

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

К #30315 больше подходит по выводимым сообщениям, конечно причина другая. К
двум перечисленным не подходит однозначно, потому что в моём случае, как и
здесь, MMC выступает в качестве source, а там в качестве target, к тому же тут
речь о пропагаторе, а там о evms и инсталляторе. Обсуждение же хотелок и судьбы
пропагатора - да, наверное лучше вообще вынести в devel@.
------- Comment #33 From 2017-12-08 21:26:37 -------
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.