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:
- inode - wskaźnik do struktury i-node, dla której zwolnimy blok;
- block - numer bloku, od którego zaczynamy zwalnianie;
- count - ilość bloków do zwolnienia.
Dane wyjściowe:
Algorytm działa w trzech fazach:
- sprawdzenie poprawności argumentów;
- załadowanie odpowiednich struktur;
- zaznaczenie zwolnionych bloków;
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.