Algorytm dealokacji bloków dyskowych - ext2_free_block

Michał Fiejka

1. Wstęp

Algorytm ext2_free_block służy do zwalniania spójnego ciągu bloków dyskowych. Funkcja ta zdefiniowana jest w pliku fs/ext2/balloc.c.

2. Działanie

Nagłówek:

void ext2_free_blocks (struct inode * inode, unsigned long block, unsigned long count)

Dane wejściowe:

Dane wyjściowe:

Algorytm działa w trzech fazach:
1.
Na początku pobieramy z parametru i-node wskaźnik do super-bloku bieżącej grupy i blokujemy go. Potem sprawdzamy, czy otrzymane argumenty są poprawne. To znaczy badamy, czy bloki leżą w strefie danych, oraz czy są w jednej grupie.

2.
Następnie wczytujemy do pamięci odpowiednie struktury. To znaczy deskryptor tej grupy i jej mapę bitową

3.
Teraz przystępujemy do zwalniania bloków. W tym celu uaktualniamy odpowiednio mapę bitową, zerując bity reprezentujące zwalniane bloki. Poza tym uaktualniamy ilość wolnych bloków w deskryptorze grupy, oraz w bloku identyfikacyjnym. Aktualizujemy również quotę. Po tym wszystkim zaznaczamy, że używane bloki były używane, co spowoduje zapisanie ich na dysku. Zapisujemy mapę bitową i wychodzimy z funkcji, zwalniając wcześniej super-blok.

3. Uwagi

To jest prosta funkcja, a jej podstawowym zadaniem jest zmiana odpowiednich bitów w mapie bitowej zajętości bloków, oraz ustawienie liczników na poprawne wartości.