Latreyte David wrote:

Bonsoir � tous,
juste une question � propos de montages loopback. J'ai r�alis� un certain nombre d'images de cd sur mon serveur afin de pouvoir les partager sur le r�seau. Pour les rendre accessibles, j'utilise une commande qui ressemble � :
mount -o loop -t iso9660 .......
j'obtiens bien ce que je d�sire si ce n'est que c'est accompagn� du message :
Invalid session number or type of track
Ne l'ayant pas tout d'abord bien lu, j'ai cru � une restriction du nombre de loop poosibles (seulement loop0 � loop8 dans /dev/) mais apr�s recherche, je suis parvenu � monter ce nombre � 16 (bien que je n'ai que 6 CD partag�s) et j'obtiens toujours le m�me message.
Quelqu'un conna�t-il la signification du message ?


(Kernel 2.4.12)

En fait le seul moyen que je connaisse pour vraiment savoir d'o� �a vient est de regarder le source. Rien dans /usr/src/linux/drivers/block/loop.c. C'est donc que le pb vient du support du FS iso9660. Dans /usr/src/linux/fs/isofs/inode.c, on trouve le message en question � la ligne 436. Si je comprends bien cette partie du code, il s'agit de la d�tection des CD-Roms multi-sessions comme l'indique le message "Session %d start ...". Il me semble cependant bizarre qu'on affiche un message d'erreur quand on d�tecte une session. Donc pour moi c'est un (petit) bug : il manque un else { ... } autour du 2�me printk comme ceci :

                if (!i) {
                          ...
                }
                else
                {
printk(KERN_ERR "Invalid session number or type of track\n");
                }


Extrait de /usr/src/linux-2.4.12/fs/isofs/inode.c (l 423 � 437)
[...]
        if(session >= 0 && session <= 99) {
                struct cdrom_tocentry Te;
                       Te.cdte_track=session;
                       Te.cdte_format=CDROM_LBA;
i = ioctl_by_bdev(bdev, CDROMREADTOCENTRY, (unsigned long) &Te);
                if (!i) {
                        printk(KERN_DEBUG "Session %d start %d type %d\n",
                                      session, Te.cdte_addr.lba,
                                      Te.cdte_ctrl&CDROM_DATA_TRACK);
                        if ((Te.cdte_ctrl&CDROM_DATA_TRACK) == 4)
                                return Te.cdte_addr.lba;
                }

                        printk(KERN_ERR "Invalid session number or type of 
track\n");
        }
[...]

Je sais que �a fait un peu masquage du pb, mais le plus important est la compr�hension du pb (que j'esp�re correct :-)).

Fred

Répondre à