Bug 14837 - udev неправильно сохраняет информацию о failed events
: udev неправильно сохраняет информацию о failed events
Status: CLOSED WONTFIX
: Sisyphus
(All bugs in Sisyphus/udev)
: unstable
: all Linux
: P2 normal
Assigned To:
:
:
:
:
: 11786
  Show dependency tree
 
Reported: 2008-03-09 13:21 by
Modified: 2009-12-05 00:59 (History)


Attachments


Note

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


Description From 2008-03-09 13:21:46
При старте системы после первого запуска udev в каталоге /dev/.udev/failed
оказывается набор файлов вида "%2fclass%2fnet%2feth0". Названия, естественно,
идут, как получилось при загрузке модулей. После этого в какой-то момент
выполняется запуск службы network, которая часть или все из них может
переименовать в совершенно другие имена, а уже после запускается udevd-final.
Он
для сгенерированных failed events предпринимает попытку их обработать, для чего
использует закодированное в имени файла старое имя. В результате очень просто
попытаться обработать события не для тех интерфейсов, которые к этому моменту
будут представлены в системе.

Решение этой проблемы то же, которое я когда-то сделал для cardmgr: сохранять
ifindex. Для данного случая можно дописывать его в конец имени файла, чтобы
потом ф-я scan_failed() извлекала именно ifindex, игнорируя имя интерфейса, и
передавала в device_list_insert() имя, восстановленное по ifindex. Для
преобразования ifname в ifindex и назад удобна libnetlink.

После решения этой проблемы станет возможным использование takeover в etcnet,
что в свою очередь разблокирует ликвидацию ещё нескольких накопившихся в
системе
костылей.
------- Comment #1 From 2008-03-10 13:09:36 -------
Очень не хочется тащить libnetlink в udev - в частности, из-за использования
его
в initramfs.

В новой версии udev можно решить эту проблему другим способом - передавать
окончательное значение devpath через файл в /dev/.udev/queue, создаваемый в
процессе обработки события. Правда, такой вариант будет правильно работать
только при условии переименования интерфейсов средствами udev - например, так,
как это сделано в 19-udev-ifrename.rules в пакете ifrename (точнее, сейчас этот
файл там, похоже, не совсем правильный). В etcnet нужно добавить скрипт,
который
только выдаёт в stdout имя, которое должен получить интерфейс, но не пытается
переименовывать его самостоятельно (это также исправит другую проблему - если
переименование интерфейсов выполняется в обход udev, неверные имена интерфейсов
от udev попадают в hal).
------- Comment #2 From 2008-03-10 14:25:34 -------
Имя, которое должно получиться, можно получить вызовом ifrename с опцией -D. 
Но я бы хотел в конечном итоге видеть систему, в которой udev не трогает имена
интерфейсов вообще.

Касательно libnetlink: проитерироваться по интерфейсам можно и без неё, сишный
код в этом отношении не связан ничем. Могу поискать образец, если нужно.
Касательно HAL: предлагаю передавать ему ifindex вместо имени, если это
возможно. Если же он не оперирует индексом вообще, то это плохо.
------- Comment #3 From 2008-03-10 15:21:12 -------
(In reply to comment #2)
> Но я бы хотел в конечном итоге видеть систему, в которой udev не трогает имена
> интерфейсов вообще.

Похоже, в апстриме подход полностью противоположный - никто, кроме udev, не
должен трогать имена интерфейсов.

> Касательно libnetlink: проитерироваться по интерфейсам можно и без неё, сишный
> код в этом отношении не связан ничем. Могу поискать образец, если нужно.

Понятно, что кусок кода можно просто скопировать, просто это лишние зависимости
от SUBSYSTEM=="net" в тех местах, где их раньше не было.

> Касательно HAL: предлагаю передавать ему ifindex вместо имени, если это
> возможно. Если же он не оперирует индексом вообще, то это плохо.

Там есть ещё и дублирование устройств (Bug #14015 - что лично я считаю багом в
hal, а не в udev). В принципе linux.ifindex в hal есть, но в devpath всё равно
входит имя интерфейса.
------- Comment #4 From 2009-06-30 21:03:05 -------
И что с этим теперь ввиду /etc/udev/rules.d/70-persistent-net.rules и закрытой
bug #19313?
------- Comment #5 From 2009-12-05 00:59:06 -------
осталось смириться