The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

scsi bug, или снова о девочках


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
 From : Alex Korchmar                       2:5020/28.101   01 Dec 98  15:26:16 
 Subj : scsi bug, или снова о девочках                                          
________________________________________________________________________________
Hi All!

интересно, почему только я наступаю на подобные грабли?

Хотите грабель? Их есть. [сразу скажу, что все нижеописанное 
бывает исключительно у владельцев ядра 2.1. С 2.0 все будет работать]

Лабораторная работа номер два.
Цель работы: на практике убедиться, что a) обработчик ошибок вообще
не отвечает своему назначению - т.е. неспособен ничего толком 
обработать; b) что линуксовый скази - суксь.

Приборы и материалы: тормозной стриммер из лабораторной номер один,
отдельный scsi-контроллер aha1540 специально для этого стриммера (
в идиотской надежде отделить в изолированной среде мух от котлет).

Теоретическая часть.
Как известно, где-то к 2.1.52, был существенно перепахан mid level
scsi код. Мне известны два отличия нового кода от старого:
повыброшено большое количество раскиданых по коду 'cli();' и 
изменен интерфейс обработки ошибок - вместо преферансных "в морду и аборт"
появились отдельные точки входа в low level драйверах для разных уровней
- отдельная команда, отдельное устройство, все устройства, хост.
Похоже, однако, этим дело не ограничилось, и по дороге насажали новых ошибок.

Факультативный элемент.
Если вы можете обойтись без осталных скази дивайсов - вкомпилите в ядро
код для скази-логгинга. Если не можете - не вкомпиляйте, поскольку этот
код не умеет избирательно привязываться к одному хосту и все интересное
будет утоплено в нормальной работе вашего винчестера (причем именно
таким образом, чтобы было невозможно легко разделить информацию от
разных хостов).

Практическая часть.

tar -tvf /dev/nst0
[skip - похоже, фокус связан именно с чтением filemark (действительно, долгая
операция), поскольку все всегда происходит на последних килобайтах в последнем
файле ]
Dec  1 02:47:37 alx kernel: aha1542_queuecommand: dev 5 cmd 05 pos -1 len 6
aha1542_queuecommand: dumping scsi cmd:05 00 00 00 00 00
Dec  1 02:47:37 alx kernel: aha1542_queuecommand: dev 5 cmd 1a pos -1 len 12
aha1542_queuecommand: dumping scsi cmd:1a 00 00 00 0c 00
Dec  1 02:47:37 alx kernel: aha1542_queuecommand: dev 5 cmd 08 pos 64 len 32768 
aha1542_queuecommand: dumping scsi cmd:08 01 00 00 40 00
Dec  1 02:48:08 alx last message repeated 46 times
[нормально, читаем]
Dec  1 02:48:37 alx last message repeated 77 times
[пока все в полном порядке. близится конец архива. И вдруг:] 
Dec  1 02:48:38 alx kernel: aha1542.c: Trying device reset for target 5
[дивайс - медленный scsi-1 стриммер, поэтому он не понимает, чего от него 
хотят - он занят, читает filemark, и за пять секунд ничего просто не 
успевает переварить.]
Dec  1 02:48:56 alx kernel: Sent BUS RESET to scsi host 1
[ядерный обработчик такие мелочи не беспокоят, таймауты не настраиваются - 
оглоблей по балде - хряп!]
Dec  1 02:49:06 alx kernel: st0: Error with sense data: extra data not valid
Current error st09:00:
sns = 70  6
Dec  1 02:49:06 alx kernel: Raw sense data:0x70 0x00 0x06 0x00 0x00 0x00 0x00
0x06 0x00 0x00 0x00 0x00 0x00 0x00
[нормальное состояние после ресета, не так ли? (не тратьте время - это "Unit
attention".)
Hо нет - только не для ядра линукса. ]
tar: /dev/nst0: No such device or address
[обработчик ошибок свалился на "disable device". Подчеркиваю - по
собственной глупости. Более того, он просто не мог после ресета никуда
больше свалиться, если не умеет понимать, что там будет именно error.
rmmod st; insmod st чудесным образом возвращает дивайс к жизни без
каких-либо сообщений об ошибках. Естественно - теперь-то inquiry пройдет.]


Факультативная практическая часть (приводится в пересказе, поскольку
логи отсутствуют. Поверьте или проверьте. Hе вздумайте, конечно, писать
сислогом на _сказевый_ винчестер - дыру прогрызете и ничего толком не
получите. О том, что все это дергается с дефолтовым левелом, а не с
KERN_DEBUG, упоминать излишне - авторам было некогда, их такие мелочи
не беспокоили.)

echo "scsi log timeout 7" > /proc/scsi/scsi
echo "scsi log error 7" > туда же

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


Вопросы для самостоятельного изучения:

каким образом управление попадает на scsi_error_handler и как это
отследить?
Если через таймаут - каким образом ему удается не попасть в лог?
Если баг не в midlevel коде (точнее, не только там, поскольку
хотя бы один там есть - собственно неработа обработчика ошибок) - что
такого изуродовали в aha1542.c, что он начал выделывать подобные кренделя?


> Alex

--- ifmail v.2.14.os-p2
 * Origin: долой %@ство! (2:5020/28.101@fidonet)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру