[pso] [tema3] dimensiune pitix_dir_entry

Lucian Adrian Grijincu lucian.grijincu at gmail.com
Sun Apr 29 13:39:31 EEST 2007


On 4/29/07, omar Chouydary <chouydary at yahoo.com> wrote:
> O problema asemanatoare cu cate inode-uri sunt pe superbloc este asta:
>
> Avand in vedere ca structura pitix_dir_entry are 20 de octeti, iar
> dimensiunea unui bloc este de 512, 1024, etc... inseamna ca intr-un bloc nu
> incape un numar fix de astfel de structuri.
> Atunci ce facem in cazul directoarelor:
>
> a) scriem in fiecare bloc de date (al inode-ului respectiv corespunzator
> directorului) cate structuri pitix_dir_entry incap, si daca urmatoarea nu
> incape in totalitate, o scriem de la inceput intr-un nou bloc de date
>
> b) scriem in fiecare bloc de date cate incap, si in plus scriem in ce a
> ramas ce putem dintr-o noua structura pitix_dir_entry astfel incat o
> structura s-ar putea imparti intre 2 blocuri consecutive de date
>
> Mi se pare mai usor de implementat varianta a, dar risipeste niste octeti la
> fiecare bloc de date.
> Daca trebuie aleasa varianta b, atunci de ce in pitix.h avem functia asta :
>
> static inline int pitix_dir_entries_per_block(struct super_block *sb)
> {
>     return sb->s_blocksize/pitix_dir_entry_size(sb);
> }
>
> Nu ar fi trebuit sa intoarca un float pentru a sti exact cate structuri (cu
> tot cu virgula) incap astfel incat sa pot sa verific in ce bloc exact este o
> anumita structura?
>
> Omar.

1. si daca-ti intoarce cu virgula ce faci?
daca vrei sa afli o cantitate intreaga din numarul asta ai sanse mari
sa dai de date eronate.
2. ce sa faci cu float in kernel mode? It's prohibited (imagineaza-ti
cazul in care pt operatii floating point trebuie sa dai comenzi si sa
astepti raspunsuri de la un mathematical co-processor.)

Presupune ca pitix_dir_entries_per_block iti returneaza numarul de
d_entry-uri care intra cu exactitate in un block. Daca un d_entry e in
doua blockuri, citesti ambele blockuri si memcpy in bufferul
d_entryului.

Lucian


More information about the pso mailing list