Najpierw jest wywoływana funkcja put_inode() z superbloku i-węzła (funkcja
charakterystyczna dla danego systemu plików). Następnie wykonywana
jest atomowa operacja: pole i_count jest zmniejszane, jeśli pozostaje
większe od zera, to funkcja kończy działanie, w przeciwnym wypadku
zakładany jest spin-lock.
Jeśli liczba dowiązań do węzła w postaci nazwy (pole i_nlink) jest równa
zero, węzeł jest usuwany z odpowiadającej mu listy w tablicy haszowanej,
a także z listy i-węzłów używanych, nieużywanych lub brudnych (z tej,
na której się znajduje). Następnie i-węzeł oznaczany jest jako zwalniany
(bit I_FREEING w polu i_state) oraz zmniejszany jest licznik i-węzłów
(inodes_stat.nr_inodes). Zwalniany jest spin-lock.
Działanie funkcji kończy wywoływanie funkcji delete_inode() oraz
clear_inode() z superbloku (jeśli w superbloku nie ma funkcji delete_inode(),
jest wywoływane clear_inode z VFS).
Jeśli pole i_nlink jest większe od zera, sprawdzane jest, czy i-węzeł
znajduje się w tablicy haszowanej.
Jeśli tak - jeśli był brudny albo zablokowany, jest przenoszony
do listy i-węzłów nieużywanych (z listy węzłów używanych albo brudnych).
Zwiększany jest licznik i-węzłów nieużywanych (inodes_stat.nr_unused).
Jeśli i-węzła nie ma w tablicy haszowanej, jest wyrzucany z listy, na której
się znajduje (pole i_list), jest oznaczany jako zwalniany (bit I_FREEING
w polu i_state), zmniejszany jest licznik i-węzłów (inodes_stat.nr_inodes),
zwalniany jest spin-lock i wywołuje się funkcję clear_inode.
Funkcję kończy wywołanie destroy_inode().
Używana przez iput funkcja VFS clear_inode() jest wywoływana głównie
przez funkcje obsługi systemu plików, po to, aby poinformować VFS,
że i-węzeł jest niepotrzebny i można zwolnić zajęte przez niego zasoby.
W funkcji tej najpierw zapisywane są na dysk wszystkie brudne bufory.
Następnie wywoływana jest wait_on_inode() (czekanie na odblokowanie i-węzła).
Uaktualniana jest quota. Wywoływane jest clear_node() z superbloku.
Pole i_state ustawiane jest na I_CLEAR.