[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