dadv: (Default)
Choose your future ([personal profile] dadv) wrote2011-09-19 08:22 pm

Неиспользуемые инструменты ржавеют

Позвольте рассказать вам одну поучительную историю, сэр! (c)

Жила-была в проекте FreeBSD ветка исходных текстов RELENG_6, и по сравнению с предыдущей пятеркой, была весьма хороша и в своё время на ней было построено немало серверов. Как и с любой веткой, случилось с ней забвение - пришло время, когда разработчики и база пользователей переместились на более новые релизы из ветки 7, а потом и 8 (скоро будет и 9). Сервера же, помаленьку обновляясь в пределах шестой ветки, достигли версии 6.4 (у кого RELEASE, у кого STABLE), а затем, по принципу "работает - не трогай" и стали работать дальше в таком состоянии.

6.4-RELEASE была выпущена в 2008-м, значимые для пользователей обновления после этого закончились где-то в первой половине 2010-го. До поры до времени, когда осенью 2011 не подписал наконец председатель правительства РФ постановление правительства РФ об изменении исчисления времени в РФ - аккурат за два месяца до этого самого изменения. После чего изменения эти благополучно попали в zoneinfo, а оттуда и в исходные тексты FreeBSD - во все ветки вплоть до шестой включительно.

После обновления очередного сервера шестой ветки (не первого в череде обновлений) оказалось, что policy routing через ipfw fwd сломался - "отполисенные" пакеты драйвер re(4) выпускал в Ethernet битыми (в показаниях tcpdump на источнике было всё чисто), в то время как с "отроученными" проблем, по-прежнему, никаких.

Долгие научные исследования показали, что в августе 2010-го (на дворе была уже 8.1-RELEASE) в шестерке тихой сапой прошло мелкое обновление ядерной подсистемы bus_dma(9), которое оказалось несовместимым с драйвером re(4), и не с ним одним - ещё затронут как минимум de(4).

Работающие и не трогаемые сервера продолжали работать, и факт поломки драйверов в шестерке не был обнаружен. До нынешнего момента. Откат указанного выше изменения полностью восстанавливает работу драйверов.

Формально, обновление bus_dma(9), выполненное jhb@, вроде бы вполне корректно и вина-то лежит на самих драйверах, некорректно использующих bus_dma. Автор драйвера re(4) pyunyh@ любезно предоставил бекпорт нынешней версии драйверов re и rl в шестую ветку, которые без проблем работают с обновленной bus_dma. Однако, поддержка шестой версии давно закончилась и он не собирается мержить новую версию в шестую ветку, а изменения в драйверах довольно значительны и протестированы пока только мной и только с одной картой из поддерживаемых драйвером.

Откат указанного изменения годовой давности в bus_dma тоже никто не будет делать (оно могло, в свою очередь, починить работу других устройств). Так и останется теперь шестерка в сломанном состоянии, видимо. А у меня до обновления серверов шестой ветки (до этого ещё очень долго) приживется обратный патч к этому изменению в bus_dma как меньшее зло при выборе между ним и новой версией двух драйверов.


Post a comment in response:

This account has disabled anonymous posting.
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org