[so2] [Tema 4] free blocks, free inodes

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sat Apr 30 23:00:25 EEST 2016


Oana Stroie <mail.oana.stroie at gmail.com> writes:
> 2016-04-29 14:08 GMT+03:00 Oana Stroie <mail.oana.stroie at gmail.com>:
>> 2016-04-29 13:54 GMT+03:00 Razvan Deaconescu via so2 <so2 at cursuri.cs.pub.ro>:
>>> Oana, să ne spui în ce stadiu ești acum cu tema, că e mai dificil să ne
>>> prindem, după ultimele mesaje :-), de ce probeme mai ai.
>>
>> Momentan e ok, am diferente la free blocks (dar arata ok 3734 = 3752).
>> Caut locul unde uit sa scad numarul de blocuri.
>>
>> Nu inteleg de unde pot lua noua dimensiune la care sa trunchez un
>> fisier.

Noua dimensiune este în câmpul i_size din inode. Dacă împarți acea
dimensiune la sb->s_blocksize și adaugi 1 (pentru rest) obții câte
blocuri va avea acum fișierul. Ce este peste se șterge.

>> Mai exact, setattr imi este apelat (fie daca scriu intr-un fisier, fie la
>> cp din teste) si eu apelez pitix_truncate (care aloca sau dealoca blocuri
>> in fc de i_size). Doar ca spre deosebire de truncate (din fs unde spunea ca
>> i_size va avea noua dimensiune), setattr nu imi seteaza i_size (il lasa cum
>> era).
>>
>> Cum accesez noua dimensiune dorita a fisierului pt a ii face truncate
>> corect? [cred ca de aici este problema cu bfree]

Acum am ajuns aici :-) Văd că folosești corect i_size.

Funcția pitix_setattr, ar trebui să fie identică cu cea din minix[1], nu
ar trebui să ai probleme legat de aia.

> Again :))
>
> Mai exact, cand sa aloc noi blocuri, ce este chemat la cp?
> Minix face in get_block (cand create este setat) sau pot in set_attr ( cand
> noul size este diferit).
> Probleme:
> - get_block este apelat mai tarziu (am presupus ca se tine cont si de cache)
> - set_attr pune in attr->ia_size, insa nu reusesc sa lucrez cu ea (poate de
> la tipul loff_t pe care il are). daca fac conversie la int da mereu 0. cum
> iau size-ul corect?

Ai apelat truncate_setsize ca să configurezi dimensiunea inode-ului la
ia_size?

Vezi că tipul de loff_t este unsigned long long, pe 64 de biți. Poate nu
convertești partea care trebuie.

[1] http://lxr.free-electrons.com/source/fs/minix/file.c?v=3.13#L26

Răzvan


More information about the so2 mailing list