[pso] [Tema4][lin] Accesarea inode-urilor

Alexandru Juncu alexandru.juncu at cs.pub.ro
Mon Apr 25 19:24:55 EEST 2011


2011/4/25 Claudiu Mihail <claudiu.bogdan.mihail at gmail.com>:
> Salut,
> Am cateva nelamuriri in legatura cu modul de accesare al inode-urilor. De
> exemplu in pitix_iget(struct super_block *sb, unsigned long ino) pentru a
> putea citi un inode arbitrar ar trebui intai sa calculez (pe baza marimii
> blocului, a marimii structurii inode si a parametrului ino) in ce bloc
> rezida si pe urma sa citesc acel bloc cu sb_bread. Dar din ce am inteles un
> inode poate fi impartit pe doua bloc-uri consecutive.

Pe scurt, da, așa este.

> Exista vreo metoda
> prin care pot citi doua blocuri consecutive in memorie? Pentru ca pe urma sa
> pot sa fac ceva de genul
> // extract disk inode
> pi = ((struct pitix_inode *) bh->b_data) + ino;
> si sa iau direct inode-ul? Mi se pare putin dubios sa citesc de doua ori cu
> sb_bread si pe urma fac memcpy ca sa unesc cele doua parti ale inode-ului.
> Daca nu dubios cel putin error prone. Orice sugestie este apreciata.

Nu aș vedea de ce să fie o problemă foarte mare în abordarea asta.
Doar să ai grijă la pointeri și zonele de memorie.

Teoretic, ai putea citi două blocuri în același apel de bread (ca doar
tu îi zici care e block size-ul...see __bread [1] for this). Testează
dacă vrei (vezi să modifici mărimea blocului din superblock),zi-ne
dacă merge, dar, serios, aș recomanda să nu te complici. If it ain't
broke, don't fix it ;)


[1] http://koala.cs.pub.ro/lxr/#linux26+v2.6.31.6/include/linux/buffer_head.h#L178


More information about the pso mailing list