Zadanie 14, alg. namei()



6.6.3.5. Zadanie

Zadanie polega na dorobieniu nowych możliwości przy podawaniu nazwy ścieżkowej. Szczególne znaczenie mają "..." i "....". Pierwszy z nich daje możliwość odwołania się do katalogu o dwa wyżej, drugi o trzy poziomy wyżej. W celu zaimplementowania tej zmiany należy zmodyfikować funkcję lookup() zwracającą i-węzeł rozpatrywanej pozycji w konkretnym katalogu (opis powyżej) - tu: "..." i "....". Dla tych pozycji należy uważać na punkt zamontowania systemu plików i kilkakrotnie (dwa lub trzy razy) wołać funkcję lookup() dla konkretnego systemu plików (z parametrem name="..").

Innym pomysłem na zmianę w jądrze jest wstępne rozpatrywanie nazwy ścieżkowej przez funkcję dir_namei(). Można by zoptymalizować ją ponieważ pozycje ".." (oraz dodatkowe "..." i "....") mają sens jedynie na początku nazwy ścieżkowej. W związku z tym proponuję najpierw przeanalizować nazwę ścieżkową i wyodrębnić w niej początkowe pozycje z kropkami, pozycje z kropkami umieszczone wewnątrz nazwy ścieżkowej (tzn. po innych pozycjach) powinny się znosić z tymi pozycjami.

Przykład: "../../../ala/kot/../pies/xxx" odnosi się do tego samego pliku co wpis "../../../ala/pies/xxx" - wewnętrzne dwie kropki zniosły się z "kot". Dopiero tak zmodyfikowana nazwa ścieżkowa powinna być poddawana działaniu algorytmu dir_namei(), albo w wypadku występowania wewnętrznych wpisów ".." można zwracać błąd.

Dodatkowo można przenieść sprawdzanie przekraczania punktu zamontowania z lookup() do dir_namei() i dokonywać tego tylko dla początkowych wpisów równych "..". Gdy skończą się pozycje tej postaci, można już nie sprawdzać punktu zamontowania, bo nie poruszamy się w górę drzewa.


Autor: Paweł Mielańczuk