Zaprezentowana zostanie wersja ifree z systemu plików Ext2.
Algorytm ifree wykorzystuje funkcja iput() po skasowaniu ostatniego
dowiązania do danego i-węzła. W systemie plików Ext2 jako operacja
zwalniania węzła jest ustawiona funkcja ext2_delete_inode(),
która wywołuje funkcję ext2_free_inode().
Funkcja ext2_free_inode() kasuje i-węzeł dyskowy, identyfikowany przez
strukturę i-węzła, której adres jest przekazywany jako parametr. Jądro powinno
wywoływać tę funkcję po serii operacji czyszczących, związanych z
wewnętrznymi strukturami danych i danymi w samym pliku: po tym, jak struktura
i-węzła zostanie usunięta z tablicy przemieszczania i-węzła, gdy z
odpowiedniego katalogu usunięte zostanie ostatnie sztywne dowiązanie do tego
i-węzła oraz gdy plik zostanie skrócony do długości 0, w celu odzyskania
wszystkich jego bloków danych.
Funkcja wykonuje następujące działania:
1. Wywołuje lock_super() w celu uzyskania wyłącznego dostępu do struktury
superbloku.
2. Wylicza z numeru i-węzła oraz liczby i-węzłów w każdej grupie bloków
indeksy grupy bloków, zawierającej i-węzeł dyskowy.
3. Wywołuje load_inode_bitmap() w celu pobrania mapy bitowej i-węzła.
4. Wywołuje funkcję clear_inode(), która wykonuje następujące operacje:
a. Zwalnia wszystkie, powiązane z i-węzłem strony z pamięci podręcznej
stron, usypiając aktualny proces, jeżeli niektóre z nich są zablokowane
(Strony mogą być zablokowane, ponieważ jądro może być w trakcie ich czytania
lub zapisywania, a nie ma możliwości zatrzymania sterownika urządzenia
blokowego).
b. Wywołuje, jeżeli została zdefiniowana, metodę clear_inode struktury
superbloku; system plików Ext2 jednak jej nie definiuje.
5. Zwiększa pole bg_free_inodes_count deskryptora grupy. Jeżeli usunięty
i-węzeł jest katalogiem, zmniejsza pole bg_used_dirs_count. Zaznacza bufor,
zawierający deskryptor grupy, jako "brudny".
6. Zwiększa pole s_free_inodes_count superbloku i oznacza zawierający go
bufor jako brudny. Ustawia także pole s_dirt struktury superbloku na 1.
7. Czyści bit odpowiadający i-węzłowi w mapie bitowej i-węzłów i oznacza
zawierający ją bufor jako brudny. Oprócz tego, jeżeli system plików został
zamontowany z flagą MS_SYNCHRONIZE, wywołuje ll_rw_block() i czeka na
zakończenie operacji zapisu bufora mapy bitowej.
8. Wywołuje unlock_super() w celu odblokowania struktury superbloku.