Do spisu treści



6.3.3 Zwalnianie i-węzłów dyskowych.



Spis tresci


Zwalnianiem i-węzłów dyskowych zajmuje się procedura ext2_free_inode , która znajduje się w pliku linux/fs/ext2/ialloc.c Na początku sprawdza ona czy argumenty wywołania są poprawne, oraz czy można zwolnić i-węzeł. Powody dla których nie można zwolnić to: brak i-węzła, brak urządzenia, licznik procesów używających i-węzła większy od 1, niezerowy licznik dowiązań do i-węzła, oraz brak w i-węźle wskaźnika do bloku identyfikacyjnego.

Po wstępnych sprawdzeniach zakładamy blokadę na blok identyfikacyjny, aby zapewnić sobie wyłączność dostępu do niego. Informacje o zwalnianym i-węźle zapisane są w strukturach w pamięci. Po wyliczeniu numeru grupy, do której należy zwalniany i-węzeł wczytujemy jej bitmapę zajętości. Następnie zwalniamy i-węzeł poprzez wyczyszczenie odpowiedniego bitu w bitmapie. Zwiększamy również liczniki wolnych i-węzłów w deskryptorze grupy i bloku identyfikacyjnym. Ponadto jeśli zwalnialiśmy i-węzeł pliku, który był katalogiem, to w deskryptorze grupy zmniejszamy licznik używanych katalogów.

W końcowej fazie zaznaczamy, iż były modyfikowany blok identyfikacyjny, bitmapa zajętości i-węzłów, deskryptor grupy. Dlatego system operacyjny nie straci informacji o modyfikacji i jeśli będzie chciał sprowadzić nowe i-węzły do pamięci to ewentualne informacje o zmianach będzie mógł zapisać na dysku. Instrukcją kończącą jest zdjęcie blokady z bloku identyfikacyjnego.

Powyższy opis można skonfrontować z oryginalnym kodem procedury ext2_free_inode opatrzonym komentarzami.


Bibliografia

  1. Pliki źródłowe Linuxa:
  2. Projekt Linux
  3. Linux Kernel Hackers Guide
  4. Maurice J. Bach "Budowa systemu operacyjnego UNIX"


Autor: Maciej Zarzycki