Page suivantePage pr�c�denteTable des mati�res

21. Traitement d'erreurs

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.

21.1 D�codage de l'�tat d'erreur

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

21.2 Codes d'�tat

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 :

GOOD.

Cet �tat indique que la cible a correctement ex�cut� la commande.

CHECK CONDITION.

Cet �tat indique qu'une condition de contention s'est produite (cf. 6.6).

CONDITION MET.

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).

BUSY.

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.

INTERMEDIATE.

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.

INTERMEDIATE-CONDITION MET.

Cet �tat est la combinaison de CONDITION MET et de INTERMEDIATE.

RESERVATION CONFLICT.

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.

COMMAND TERMINATED.

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).

QUEUE FULL.

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.

21.3 Clefs du buffer SCSI

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.                                                          |
+=============================================================================+

21.4 Codes h�te

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

21.5 Codes du pilote

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


Page suivantePage pr�c�denteTable des mati�res

Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:15