[so2] [Tema5] Intrebare pitix_truncate

Sergiu Weisz sergiu121 at gmail.com
Sun Apr 19 18:42:29 EEST 2020


On 19.04.2020 16:52, Alexandru Meterez wrote:

> On Sun, 19 Apr 2020 at 16:13, Sergiu Weisz via so2 <so2 at cursuri.cs.pub.ro 
> <mailto:so2 at cursuri.cs.pub.ro>> wrote:
> 
>     On 19.04.2020 15:52, Alexandru Meterez via so2 wrote:
>      > Salutare.
>      > Nu inteleg daca pitix_truncate merge ca truncate-ul din userspace.
>      >
>      > Adica in pitix_setattr, care eu inteleg ca se apeleaza mereu cand se schimba
>      > ceva legat de inode(dimensiune, drepturi etc), daca modific size-ul,
>     trebuie sa
>      > intre pe pitix_truncate. In pitix_truncate, in functie de attr->ia_size,
>     trebuie
>      > sa ma uit daca noul size e mai mare sau mai mic fata de cel vechi si sa
>     aloc mai
>      > multe blocuri, respectiv sterg blocuri.
>      >
>      > Nu stiu daca fac eu ceva fundamental gresit, dar la mine attr->ia_size e
>     vesnic
>      > 0. Am pus printuri si nu se schimba nimic cand scriu/sterg ceva dintr-un
>     fisier.
>      > Putin ajutor va rog?
> 
>     Salutare,
> 
>     Ai inteles corect ce face truncate.
> 
>     Dimensiunea noua o determini in functie de numarul de blocuri pe care le are
>     inode-ul, nu din attr->ia_size.
> 
>     Poti sa vezi o implementare referinta aici [1].
> 
> Pai si in laborator si in minix_setattr se face truncate_setsize(inode, 
> attr->ia_size), care din cate inteleg face inode->i_size = attr->ia_size pe 
> fundal. Una din probleme este ca mereu am attr->ia_size egal cu 0. Am pus 
> printuri, codul este copy paste cel din labul de filesystems 2.
> Alta nelamurire este ca nu inteleg de unde am acces in pitix_truncate la 
> dimensiunea veche. Adica am acces la dimensiunea noua, dar cum o iau si pe cea 
> veche ca sa pot sa le compar sa vad daca trebuie sa aloc/sterg blocuri?
> Imi e neclar.

Imi cer scuze, am gresit in mail-ul anterior. Dimensiunea noua o ai in i_size si 
o setezi folosind truncate_setsize(), asa cum ai mentionat tu. Dimensiunea veche 
o poti determina din numarul de blocuri pe care l-ai alocat pentru inode, din 
i_blocks, deoarece tu controlezi aceasta valoare.

Nu imi este clar din ce motiv este ia_size 0. Ma voi documenta si revin.

> [1] https://elixir.bootlin.com/linux/latest/source/fs/minix/itree_common.c#L294

Sergiu


More information about the so2 mailing list