Funkcja iget(sb, ino) zwraca VFS-owego inode-a odpowiadającemu
inode-owi 'ino' z sytemu plików opisywanego przez superblock 'sb'.
Jej działanie sprowadza się do znalezienia inode-a jeśli już istnieje, bądź
stworzenia go, oraz do zadbania żeby wszystkie kolejki i zmienne dotyczące
podystemu cachowania inodów były uaktualnione.
Funkcja pomocnicza __iget() jest wywoływana zawsze gdy już
znajdziemy lub stworzymy inode-a. Zwiększa ona i_count, i
przesuwa (jeśli trzeba) i_node-a z kolejki inode-ów nieużywancyh do kolejki
używanych (zwiększając inode_stat.nr_unused).
Algorytm iget:
inode_lock-a) szuka tego inode-a w
inode_hashtable (metoda find_inode()). Jeśli się uda wywołuje __iget().
inode_hashtable to znaczy
że po raz pierwszy ma z tym inode-em do czynienia (ewentualnie został on już skasowany z kolejki inoed-ów nieużywanych), i wywołuje
get_new_inode() :
get_new_inode() tworzy nowego inode-a
(metodą ialloc), która to operacja może się blokować. Tak więc
wcześniej zwalnia ona inode_lock. Po wykonaniu tej operacji musi
więc potem (już z inode_lock-iem) sprawdzić czy w między czasie
szukany inode nie został wstawiony do kolejki inode_hashtable.
Jeszcze raz przeszukuje więc kolejkę używanych inode-ów (
find_inode()).
Jeśli znajdzie, wywołuje __iget() aby uaktualnić liczbe odwołań,
po czym kasuje właśnie stworzonego.
Jeśli szukany inode ciągle nie jest w kolejce to inicjalizuje pola tego nowo
stworzonego, wywołując przy okazji specyficzną dla danego systemu plików
sb->s_op->read_inode()
Funkcja iput() jest wywoływana gdy inode
przestaje być używany. Jej zadaniem jest tak jak w przypadku iget() żeby wszelkie kolejki miały poprawne wartości.
Algorytm iput:
sb->s_op->put_inode(),
to jest wywoływana bez żadnych lock-ów (aby się mogła blokować)
inode_lock i zmniejsza i_count. Jeśli to nie było ostatnie odwołanie to kończy.
(i_nlink = 0) (wszystkie odwołania do inode-a zostały
w miedzyczasie skasowane) to
inode ten zostaje usunięty z kolejek w których się znajduje, i niszczony metodą
sb->op->delete_inode().
inode_unused (wraz ze zwiększeniem inode_stat.nr_unused).
Inode-y nie związane z żadnym systemem plików są kasowane.