A Linux 7.2 kernel szigorúbb ellenőrzéseket vezet be az új NTFS kernelmeghajtóban a sérült vagy szabálytalan lemezmetaadatok feldolgozásához, megszüntet egy MFT-rekordokat érintő visszaírási holtpontot, valamint több erőforrás-szivárgást és adatszerkezeti hibát javít. A Linux 7.1-ben bevezetett meghajtó szélesebb körű tesztelése olyan problémákat tárt fel, amelyek ritkább fájlrendszerállapotoknál, hibás kötetek csatolásakor vagy párhuzamos műveletek során jelentkezhettek.

A meghajtó részletesebben ellenőrzi az NTFS-attribútumokat, az attribútumlistákat, az indexgyökereket, az indexbejegyzéseket, a kiterjesztett attribútumokat, a leképezési párokat és a $LogFile újraindítási területeit. Ezek az adatszerkezetek a fájlok tulajdonságait, a könyvtárindexeket, valamint a logikai fájlterületek és a fizikai lemezklaszterek kapcsolatát írják le. A szigorúbb érvényességi és mérethatár-ellenőrzések több határon túli memóriaelérést és egészszám-túlcsordulást akadályoznak meg. A meghajtó az egymásnak ellentmondó metaadatokat is következetesebben utasítja el, ahelyett hogy hibás méretekkel vagy eltolásokkal folytatná a feldolgozást.
A leképezési párok dekódolása külön határellenőrzéseket használ, és a logikai klaszterszámok túlcsordulását is felismeri. A leképezési párok határozzák meg, hogy egy fájl logikai adatterületei a kötet mely fizikai klasztereiben helyezkednek el, ezért a hibás értékek téves lemezterületek eléréséhez vagy memóriahibákhoz vezethetnek.
A Linux 7.2 kernelben javítanak egy visszaíráskor kialakuló holtpontot is, amely az extent MFT rekordokat érintette. Az NTFS minden fájlt és könyvtárat a Master File Table rekordjaiban tart nyilván. Ha egy fájl attribútumai nem férnek el az elsődleges rekordban, a fájlrendszer további extent rekordokat rendel hozzá. A hibás zárolási sorrend bizonyos körülmények között megakaszthatta az ilyen rekordokhoz tartozó módosított adatok háttértárra írását. A javítás rendezi az érintett műveletek sorrendjét, így a visszaírás nem vár határozatlan ideig egy már foglalt erőforrásra.
A meghajtó lezárja a fill_super() hibakezelési útvonalaiban talált erőforrás-szivárgásokat. Ez a függvény a fájlrendszer csatolásakor olvassa be és készíti elő a kötet alapvető adatszerkezeteit. Ha a folyamat korábban hibával megszakadt, egyes lefoglalt objektumok felszabadítás nélkül maradhattak. Hasonló szivárgást javítottak a fájlnevek gyorsítótárában is. A kötetcímke olvasását és módosítását mostantól sorosított hozzáférés védi, így a párhuzamos műveletek nem írhatják felül egymás állapotát. A kapcsolódó hibakezelés is pontosabban adja tovább a műveletek során keletkező hibákat.
Az indexgyökér rezidens metaadatai átméretezéskor is összhangban maradnak a tényleges adatszerkezettel. A rezidens adatok közvetlenül az MFT-rekordban helyezkednek el, ezért az index méretének változtatásakor a rekordban tárolt hossz- és helyadatokat is frissíteni kell. A Linux 7.2 kernel helyesen jelenti a szimbolikus linkek méretét, és elhagy egy szükségtelen memóriafoglalást a közvetlenül az MFT-rekordban tárolt beágyazott adatok feldolgozásakor. A fejlesztők eltávolították a nem támogatott kvótakódot is, amely működő lemezkvóta-kezelést nem kínált, de növelte a karbantartandó kód mennyiségét.
A Linux 7.2-be végül bekerült a Windows natív szimbolikus linkjeinek követése és létrehozása is, amelyről korábbi cikkünkben már részletesen beszámoltunk. Akkor a javítássorozat késői beküldése miatt még valószínűbbnek tűnt, hogy a funkció csak egy későbbi kernelkiadásban jelenhet meg, de a módosításokat végül beolvasztották a Linux 7.2 fejlesztési fájába.
További részletek a kapcsolódó pull requestben olvasható.
