[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Question sur le montage



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



Reply to: