[pso] [tema4]buguri

Octavian Voicu octavian.voicu at gmail.com
Thu Jun 4 15:21:36 EEST 2009


2009/6/4 Sandu Popa Marius <sandupopamarius at gmail.com>

> 2. A doua problema este ca delete_inode si destroy_inode se apeleaza de
> prea multe ori: la rmdir chiar daca intorc eroare el imi apeleaza inainte
> delete_inode si destroy_inode.
>

Sa zicem ca ai asta in super_operations:

struct super_operations pitix_sops = {
    .alloc_inode    = pitix_alloc_inode,
    .destroy_inode    = pitix_destroy_inode,
    .write_inode    = pitix_write_inode,
    .delete_inode    = pitix_delete_inode,
    .put_super    = pitix_put_super,
    .statfs        = pitix_statfs,
};

Presupun ca alloc_inode si destroy_inode sunt puse in super_operations si
fac kzalloc respectiv kfree. Functiile alloc_inode si destroy_inode din
super_operations nu se refera la alocarea / dezalocarea de inode-uri din
imap, ci strict la alocarea / dezalocarea de memorie pentru structura inode
(care e inclusa in structura definita de tine care include in plus pointerii
catre blocurile de date din acel inode).

Legat de stergerea inode-urilor, un inode este sters de pe disc (prin
apelarea delete_inode) atunci cand nlink-ul sau ajunge la 0. Asta e
comportamentul pentru drop_inode, functia din super operations care e
apelata cand se vrea eliberarea unui inode din memorie (generic_drop_inode
face asta).

Deci in unlink tu trebuie sa apelezi inode_dec_link_count. Directoarele ar
trebui sa inceapa cu nlink == 2 (pentru directoare incrementezi nlink-ul in
iget), deci in rmdir trebuie sa apelezi unlink + inca o data
inode_dec_link_count. Functia delete_inode se va apela doar cand nlink
ajunge la 0 (deci dupa doua inode_dec_link_count daca nlink era initial 2).
Functia destroy_inode se va apela oricum (chiar daca returnezi eroare, ca sa
elibereze struct inode *).



-- 
Octavian Voicu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20090604/8b2842c9/attachment.htm>


More information about the pso mailing list