Les fonctions open
, ioctl
, write
et read
peuvent renvoyer des erreurs. Dans ce cas, leur valeur de retour est -1 et la variable globale errno est positionn�e au num�ro d'erreur (n�gatif).
Les valeurs de errno sont d�finies dans /usr/include/errno.h
.
Les valeurs n�gatives possibles sont les suivantes :
Fonction | Erreur | Description
=========|==============|==================================================
open | ENXIO | p�riph�rique invalide
| EACCES | l'acc�s n'est pas en lecture/�criture (O_RDWR)
| EBUSY | le p�riph�rique est acc�d� en mode non bloquant,
| | mais il est occup� actuellement
| ERESTARTSYS | erreur interne. Essayez de la rendre reproductible
| | et informez-en le canal SCSI (pour les d�tails sur
| | le rapport de bogue, se reporter au SCSI-HOWTO de
| | Drew Eckhardts).
ioctl | ENXIO | p�riph�rique invalide
read | EAGAIN | le p�riph�rique bloqu�. Essayez plus tard.
| ERESTARTSYS | erreur interne. Essayez de la rendre reproductible
| | et informez-en le canal SCSI (pour les d�tails sur
| | le rapport de bogue, se reporter au SCSI-HOWTO de
| | Drew Eckhardts).
write | EIO | taille trop petite (plus petite que cette de l'en-
| | t�te g�n�rique). Attention : il n'y a actuellement
| | aucun contr�le de d�bordement.
| EAGAIN | le p�riph�rique bloqu�. Essayez plus tard.
| ENOMEM | la m�moire n�cessaire pour cette requ�te ne peut
| | �tre allou�e. Essayez plus tard sauf si vous depas-
| | sez la taille maximale de transfert (cf. ci-dessus).
select | | sans description
close | | sans description
Pour la lecture et l'�criture, des valeurs de retour positivent indiquent comme d'habitude la quantit� d'octets transf�r�s. Cette valeur doit correspondre � celle demand�e.
En plus, une information d�taill�e est fournie par hd_status
du noyau et par sense_buffer
du p�riph�rique (cf. section ref id="sec-sensebuff" name="Le tampon SCSI">), les deux utilisant la structure d'en-t�te g�n�rique.
Les diff�rents sens de hd_status
peuvent �tre trouv�s dans drivers/scsi/scsi.h
. Cet unsigned int
est compos� de diff�rentes parties :
lsb | ... | ... | msb
=======|===========|===========|============
status | sense key | host code | driver byte
Les macros de drivers/scsi/scsi.h
sont disponibles, mais elles ne peuvent malheureusement pas �tre facilement utilis�es � cause d'interd�pendances tordues entre fichiers d'en-t�te. Il faudrait faire une passe sur ces fichiers pour clarifier les choses.
Macro | Description
=======================|=================================================
status_byte(hd_status) | Etat du p�riph�rique. cf. section Codes d'etat
msg_byte(hd_status) | du p�ripherique. cf. section buffer SCSI
host_byte(hd_status) | du noyau. cf. section codes h�te
driver_byte(hd_status) | du noyau. cf. section codes interm�diaires
Les codes d'�tat de p�riph�rique qui suivent (issus de drivers/scsi/scsi.h
) sont disponibles :
Valeur | Symbole
=======|=====================
0x00 | GOOD
0x01 | CHECK_CONDITION
0x02 | CONDITION_GOOD
0x04 | BUSY
0x08 | INTERMEDIATE_GOOD
0x0a | INTERMEDIATE_C_GOOD
0x0c | RESERVATION_CONFLICT
On constate que ces valeurs symboliques ont subi un d�calage droit. Lorsque l'�tat indique CHECK_CONDITION, les donn�es du buffer SCSI sont valides (contr�lez en particulier le code d'�tat additionnel et le qualificateur de code d'�tat additionnel).
Les valeurs qui suivent concernent les sp�cifications SCSI-2 :
Table 27 : Code de l'octet d'�tat
+=================================-==============================+
| Bits de l'octet d'�tat | Etat |
| 7 6 5 4 3 2 1 0 | |
|---------------------------------+------------------------------|
| R R 0 0 0 0 0 R | GOOD |
| R R 0 0 0 0 1 R | CHECK CONDITION |
| R R 0 0 0 1 0 R | CONDITION MET |
| R R 0 0 1 0 0 R | BUSY |
| R R 0 1 0 0 0 R | INTERMEDIATE |
| R R 0 1 0 1 0 R | INTERMEDIATE-CONDITION MET |
| R R 0 1 1 0 0 R | RESERVATION CONFLICT |
| R R 1 0 0 0 1 R | COMMAND TERMINATED |
| R R 1 0 1 0 0 R | QUEUE FULL |
| | |
| Tous autres codes | R�serv� |
|----------------------------------------------------------------|
| R = Bit r�serv� |
+================================================================+
La d�finition des codes de l'octet d'�tat sont donn�es ci-dessous :
Cet �tat indique que la cible a correctement ex�cut� la commande.
Cet �tat indique qu'une condition de contention s'est produite (cf. 6.6).
Cet �tat, ou INTERMEDIATE-CONDITION MET est renvoy� lorsque les conditions de l'op�ration demand�e sont satisfaites (cf. commandes SEARCH DATA et PRE-FETCH).
Cet �tat indique que la cible est occup�e. Il peut �tre renvoy� lorsque la cible ne peut accepter de commande depuis un initiateur inacceptable par ailleurs (i.e. conflit d'absence de r�servation). L'action de reprise recommand�e est une nouvelle tentative ult�rieure.
Cet �tat, ou INTERMEDIATE-CONDITION MET doit �tre renvoy�e apr�s chaque commande r�ussie d'une s�rie de commandes li�es (sauf pour la derni�re), sauf si celle-ci se termine par un CHECK CONDITION, RESERVATION CONFLICT, ou COMMAND TERMINATED. Si ni INTERMEDIATE ni INTERMEDIATE-CONDITION MET n'est renvoy�, la s�rie de commandes se termine, ainsi que le processus d'entr�es/sorties.
Cet �tat est la combinaison de CONDITION MET et de INTERMEDIATE.
Cet �tat doit �tre renvoy� lorsqu'un initiateur tente d'acc�der � une unit� logique ou � un extension � l'int�rieur d'une unit� logique r�serv�e avec un type de r�servation en conflit pour un autre p�riph�rique SCSI (cf. commandes RESERVE et RESERVE UNIT). L'action de reprise recommand�e est une nouvelle tentative ult�rieure.
Cet �tat doit �tre renvoy� lorsque la cible termine le processus d'entr�es/sorties apr�s r�ception d'un message TERMINATE I/O PROCESS (cf. 5.6.22). Cet �tat indique aussi qu'une condition de contention s'est produite (cf. 6.6).
Cet �tat doit �tre impl�ment� si la file d'attente marqu�e (tagged queuing) l'est aussi. Il est renvoy� lors de la r�ception d'un message SIMPLE QUEUE TAG, ORDERED QUEUE TAG, ou HEAD OF QUEUE TAG et que la file de commandes est pleine. Le processus d'entr�e/sortie n'est alors pas plac� dans la file de commandes.
Les clefs r�sultantes peuvent �tre rapatri�es � l'aide de la macro msg_byte
(cf. section
D�codage de l'�tat d'erreur).
Les symboles du noyau qui suivent sont pr�d�finis dans drivers/scsi/scsi.h
:
Valeur | Symbole
=======|================
0x00 | NO_SENSE
0x01 | RECOVERED_ERROR
0x02 | NOT_READY
0x03 | MEDIUM_ERROR
0x04 | HARDWARE_ERROR
0x05 | ILLEGAL_REQUEST
0x06 | UNIT_ATTENTION
0x07 | DATA_PROTECT
0x08 | BLANK_CHECK
0x0a | COPY_ABORTED
0x0b | ABORTED_COMMAND
0x0d | VOLUME_OVERFLOW
0x0e | MISCOMPARE
Une liste extraite de la doc SCSI-2 suit (issue de la section 7.2.14.3) :
Table 69: Description des clefs (0h-7h) du buffer SCSI
+========-====================================================================+
| Clef | Description |
|--------+--------------------------------------------------------------------|
| 0h | NO SENSE. Indique qu'aucune information sp�cifique n'est |
| | disponible pour l'unit� logique d�sign�e. C'est le cas pour les |
| | commandes r�ussies ou celles dont l'�tat est CHECK CONDITION ou |
| | COMMAND TERMINATED � cause de l'un des bits filemark, EOM ou ILI. |
|--------+--------------------------------------------------------------------|
| 1h | RECOVERED ERROR. Indique que la r�ussite de la derni�re commande |
| | fut conditionn�e par une action de r�paration effectu�e par la |
| | cible. Les octets additionnels peuvent fournir des d�tails, ainsi |
| | que le champ information. Lorsque plusieurs erreurs r�par�es se |
| | produisent durant une commande, le choix de celle indiqu�e |
| | (premi�re, derni�re, plus s�v�re, etc.) d�pend du p�riph�rique. |
|--------+--------------------------------------------------------------------|
| 2h | NOT READY. Indique que l'unit� logique est inaccessible. Une |
| | intervention manuelle peut �tre n�cessaire. |
|--------+--------------------------------------------------------------------|
| 3h | MEDIUM ERROR. Indique la fin d'une commande sur une erreur non- |
| | r�cup�rable, caus�e probablement par un d�faut du support ou une |
| | erreur de donn�es. Cette clef peut aussi �tre renvoy�e si la |
| | cible ne peut faire la distinction entre un d�faut du support et |
| | un d�faut sp�cifique du mat�riel (clef 4h). |
|--------+--------------------------------------------------------------------|
| 4h | HARDWARE ERROR. Indique que la cible a d�tect� une erreur mat�- |
| | rielle irr�cup�rable (d�faut du contr�leur, du p�riph�rique, er- |
| | reur de parit�, etc.) lors de l'ex�cution de la commande ou d'un |
| | auto-test. |
|--------+--------------------------------------------------------------------|
| 5h | ILLEGAL REQUEST. Indique qu'un param�tre ill�gal a �t� d�tect� |
| | dans le bloc de description de commande ou dans les param�tres |
| | additionnels (pour certaines commandes : FORMAT UNIT, SEARCH DATA,|
| | etc.). Si la cible d�tecte un param�tre incorrect, il doit termi- |
| | ner celle-ci sans modifier le contenu du support. Si le param�tre |
| | incorrect se trouve dans les param�tres additionnels, la cible |
| | peut avoir d�j� modifi� le support. Cette clef est aussi renvoy�e |
| | lors de la r�ception d'un message IDENTIFY invalide (5.6.7). |
|--------+--------------------------------------------------------------------|
| 6h | UNIT ATTENTION. Indique que le support amovible a pu �tre chang� |
| | ou que la cible a �t� r�initialis�e. Cf. 6.9 pour d'autres infor- |
| | mation sur cette condition. |
|--------+--------------------------------------------------------------------|
| 7h | DATA PROTECT. Indique qu'une commande de lecture ou d'�criture a |
| | �t� tent�e sur un bloc prot�g� contre cette op�ration. Celle-ci |
| | n'est pas effectu�e. |
+=============================================================================+
Table 70: Description des clefs (8h-Fh) du buffer SCSI
+========-====================================================================+
| Clef | Description |
|--------+--------------------------------------------------------------------|
| 8h | BLANK CHECK. Indique qu'un p�riph�rique � �criture unique ou |
| | s�quentiel a trouv� un support vierge ou une indication de fin de |
| | donn�es de formatage lors de la lecture, ou qu'un support non |
| | vierge � �criture seule a �t� trouv� pendant l'�criture. |
|--------+--------------------------------------------------------------------|
| 9h | Vendor Specific. Cette clef est disponible pour indiquer des |
| | cas particuliers sp�cifiques du constructeur. |
|--------+--------------------------------------------------------------------|
| Ah | COPY ABORTED. Indique qu'une commande COPY, COMPARE ou COPY AND |
| | VERIFY a echou� � cause d'une condition d'erreur sur le p�riph�- |
| | rique source, destination ou les deux (cf. 7.2.3.2 pour plus de |
| | d�tails). |
|--------+--------------------------------------------------------------------|
| Bh | ABORTED COMMAND. Indique que la cible a abandonn� la commande. |
| | L'initiateur peut �ventuellement corriger le probl�me par une |
| | nouvelle tentative. |
|--------+--------------------------------------------------------------------|
| Ch | EQUAL. Indique qu'une commande SEARCH DATA a satisfait une con- |
| | dition d'�galit�. |
|--------+--------------------------------------------------------------------|
| Dh | VOLUME OVERFLOW. Indique qu'un p�riph�rique � m�moire-tampon a |
| | atteint la fin de partition et que des donn�es non �crites sur le |
| | support peuvent rester dans le tampon. Une (ou plusieurs) commande|
| | RECOVER BUFFER DATA peut �tre tent�e pour lire les donn�es non |
| | �crites depuis le tampon. |
|--------+--------------------------------------------------------------------|
| Eh | MISCOMPARE. Indique que les donn�es source ne correspondent pas |
| | � celles lues sur le support. |
|--------+--------------------------------------------------------------------|
| Fh | RESERVE. |
+=============================================================================+
Les codes h�tes qui suivent sont d�finis au niveau de drivers/scsi/scsi.h
. Ils sont positionn�s par le pilote du noyau et doivent �tre utilis�s avec la macro host_byte
(cf. section
D�codage de l'�tat d'erreur) :
Valeur | Symbole | Description
=======|================|========================================
0x00 | DID_OK | Pas d'erreur
0x01 | DID_NO_CONNECT | Connexion impossible avant le timeout
0x02 | DID_BUS_BUSY | BUS occup� durant la p�riode de timeout
0x03 | DID_TIME_OUT | Timeout atteint pour une autre raison
0x04 | DID_BAD_TARGET | Mauvaise cible
0x05 | DID_ABORT | Arr�t effectu� pour une autre raison
0x06 | DID_PARITY | Erreur de parit�
0x07 | DID_ERROR | Erreur interne
0x08 | DID_RESET | R�initialis� par quelqu'un
0x09 | DID_BAD_INTR | Interruption inattendue re�ue
Le pilote de niveau interm�diaire cat�gorise l'�tat renvoy� par le pilote de bas niveau en fonction du buffer SCSI du p�riph�rique. Il sugg�re certaines actions pouvant �tre tent�es comme un r�essai, un abandon ou un changement de topographie. La routine scsi_done
de scsi.c
effectue un travail tr�s diff�renci� fond� sur host_byte()
, status_byte()
, msg_byte()
et la suggestion pr�c�dente. Ensuite, il positionne l'octet du pilote afin d'indiquer ce qui a �t� r�alis�. L'octet du pilote est en deux parties : l'�tat du pilote et la suggestion. Chaque moiti� est compos�e des valeurs suivantes (de scsi.h
) combin�es par un OR
:
Valeur | Symbole | Description ou �tat du pilote
=======|================|========================================
0x00 | DRIVER_OK | pas d'erreur
0x01 | DRIVER_BUSY | inutilis�
0x02 | DRIVER_SOFT | inutilis�
0x03 | DRIVER_MEDIA | inutilis�
0x04 | DRIVER_ERROR | erreur interne du pilote
0x05 | DRIVER_INVALID | termin� (DID_BAD_TARGET ou DID_ABORT)
0x06 | DRIVER_TIMEOUT | termin� avec timeout
0x07 | DRIVER_HARD | termin� avec une erreur fatale
0x08 | DRIVER_SENSE | buffer SCSI disponible pour informations
Valeur | Symbole | Description de la suggestion
=======|================|========================================
0x10 | SUGGEST_RETRY | r�essayer la requ�te SCSI
0x20 | SUGGEST_ABORT | abandonner la requ�te
0x30 | SUGGEST_REMAP | remape le bloc (non encore implement�)
0x40 | SUGGEST_DIE | laisser le noyau tomber en "panic"
0x80 | SUGGEST_SENSE | lire le buffer SCSI du p�riph�rique
0xff | SUGGEST_IS_OK | rien � faire
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15