[pso] open() si dimensiunea discului virtual

Radu Rendec pso@cursuri.cs.pub.ro
Sun, 02 May 2004 19:23:43 +0300


Initializand dimensiunea discului virtual la 0, am constatat ca
operatiile de read/write pe un fd esueaza chiar si dupa ioctl-ul care
seteaza dimensiunea. Si mai interesant este ca read() si write() esuau
fara ca request-ul sa fie apelat macar.

Facand teste suplimentare (close() pe file descriptor dupa setarea
dimensiunii si open() din nou), am ajuns la concluzia ca la apelul
open() pe block devices se salveaza undeva (probabil in inode?)
dimensiunea block device-ului (adica numarul de sectoare). La un apel de
read() sau write() se pare ca inainte de a se genera un request este
verificata intai dimensiunea salvata la momentul deschiderii fisierului.
Apelul write() de exemplu esueaza cu "No space left on device" fara sa
se genereze vreun request spre driver.

In aceste conditii se pare ca un fd ar trebui inchis si redeschis dupa
ioctl-ul de conectare (programul de test nu face asta, asa ca am
intializat numarul de sectoare cu o valoare suficient de mare incat sa
depaseasca valoarea maxima folosita acolo -- 11*40960). Sau poate la
ioctl ar trebui modificat si numarul de sectoare salvat? (oricum asta nu
rezolva alte eventuale fd-uri deschise deja pe acelasi vdisk)

E ceva ce imi scapa?