Portál AbcLinuxu, 23. května 2024 06:39

Jaderné noviny – 10. 5. 2018: Nové API pro připojování souborových systémů

27. 5. 2018 | David Kolibáč
Články - Jaderné noviny – 10. 5. 2018: Nové API pro připojování souborových systémů  

Stav vydání jádra. Citáty týdne: James Bottomley, Sasha Levin a Paul McKenney. Nové API pro připojování souborových systémů.

Stav vydání jádra

Kernel release status. Jonathan Corbet. 9. května 2018

Současné vývojové jádro je 4.17-rc4, vydané 6. května. Linus řekl: „Dvě třetiny patche 4.17-rc4 jsou ovladače, což docela sedí. Média, sítě, rdma, vstupní zařízení, nvme, usb. Jinými slovy: od každého trošku.“ Kódové jméno bylo poprvé od 4.10 změněno, a to na „Merciless Moray“.

Stabilní aktualizace: 4.16.8, 4.14.404.9.99 byly vydány 9. května.

Citáty týdne

Quotes of the week. Jonathan Corbet. 9. května 2018

Kdybychom dokázali naskriptovat vkus, už dávno bychom Linuse nahradili něčím mnohem méně nevrlým.

James Bottomley

Co kdyby Linus vůbec nevydával tečkové verze? Mohli bychom častěji otevírat začleňovací okno a protože by se lidé nemohli upínat k žádnému konkrétnímu vydání, ani by nespěchali se zařazením oprav do pozdějších -rc cyklů.

Odstranili bychom podnět k zařazování špatně otestovaných patchů. Správci by stále mohli commitovat, co by se jim hodilo, ale nebyl by důvod, aby commitovali kód, kterému moc nevěří, jenom aby se stihlo nahodilé vydání, které stejně nikdo nebude používat.

Sasha Levin

Mno, řeknu to asi takhle…

Tohle je tvůj malý, hezký, elegantní algoritmus.

Tohle je tvůj malý, hezký, elegantní algoritmus vybavený, aby přežil v jádře Linux.

Nějaké otázky? ;-)

Paul McKenney

Nové API pro připojování souborových systémů

A new API for mounting filesystems. Jake Edge. 4. května 2018

Systémové volání mount() trpí řadou nedostatků, kvůli nimž někteří začali zvažovat jiné API. Jedním z nich byl na loňském Summitu o úložištích, souborových systémech a správě paměti Miklós Szeredi, který na sezení diskutoval své myšlenky, jak by mohlo vypadat nové API pro připojování souborových systémů. David Howells od té doby se Szeredim a správcem VFS Alem Virem na tomto API pracovali, a to na letošním summitu prezentoval.

Začal vyjmenováním některých nevýhod stávajícího API pro připojování. Jedna z nich spočívá v tom, že volání mount() sice můžete předat datovou stránku, ale jen jednu. Je-li potřeba příliš mnoho voleb nebo jsou-li parametry příslušející volbám příliš dlouhé, na stránku se nevejdou. Chybové hlášky a informace o tom, co se pokazilo, by se daly vylepšit. Některé souborové systémy obsahují chybu takovou, že neplatná volba vede k selhání volání mount(), ale zanechá superblok v nekonzistentním stavu, protože předcházející volby aplikovány budou. Z publika se ozvalo několik hlasů, že tato chyba byla průběžně opravena v ext4 i XFS, leč mohou zbývat jiné souborové systémy, které tímto chováním stále trpí.

Další problémy se týkají předávání parametrů v jádře pomocí datové stránky, pokračoval Howells. Například jmenný prostor nejde převést na řetězec, což by bylo potřeba při předávání volby jmenného prostoru. Aktuálně se jmenné prostory dědí od rodičovského souborového systému, ale při automatickém připojení by se jmenné prostory připojení a sítě měly dědit od procesu, který připojení vyvolal.

Na úrovni jádra první krok připojování spočívá ve vytvoření kontextu souborového systému, který je reprezentován pomocí struct fs_context. Jde o interní strukturu jádra, kterou uživatelé uvnitř jádra mohou inicializovat a přímo používat, ale pro účely volání z uživatelského prostoru ji vytvářejí ovladače souborových systémů. Tato struktura obsahuje různá pole zahrnující operace parsovacích a validačních voleb, typ souborového systému, informace o jmenném prostoru a zabezpečení atd. Více informací je k mání v commitu v Howellsově gitovém repozitáři věnovaném této práci.

Viro navrhl, že by mohlo být užitečné uvažovat o ovladačích souborových systémů jako o externích serverech. Ve skutečnosti mohou (ale nemusejí) být v jádře, ale připojování je vlastně vytvoření žádosti o připojení k příslušnému serveru. Volající z uživatelského prostoru by voláním fsopen() získal deskriptor souboru, pak by získal volby zápisu a informace o konfiguraci dotyčného deskriptoru souboru, následované příkazem k „vytvoření“, který by vygeneroval superblok a kořenový adresář. Howells už má funkční kód, který zhruba odpovídá tomuto:

fd = fsopen("nfs", 0);
write(fd, "d server:/dir");
write(fd, "o tcp");
write(fd, "o intr");
write(fd, "x create");

Tím by se vytvořil kontext souborového systému NFS na „serveru“ se dvěma volbami (TCP transport a přerušitelná operace). Poslední zápis je to, co ve skutečnosti kontext vytvoří. Tento kontext se dá použít k připojení souborového systému voláním podobným tomuto:

fsmount(fd, "/mntpnt", flags);

Příznaky fsmount() by řídily volby, např. nodevnoexec, a propagační atributy jako „soukromý“ (private) nebo „podřízený“ (slave). Volby fsopen() by mohly zahrnovat záležitosti jako překladové tabulky UID/GID síťových souborových systémů typu NFS, odbourala by se tím potřeba něčeho jako shiftfs.

Vedle toho by přibylo nové systémové volání (fspick()), které by provádělo opětovné nastavení superbloku při opakovaném připojení, vázaném připojování atd. To je aspoň Howellsova představa – Viro pro stejnou věc navrhl několik nových volání jako mount_new(), mount_clone()mount_move().

Howells byl dotázán, co by se stalo se stávajícím API pro připojování. Zůstalo by k dispozici, ale nejspíš by časem přešlo na implementaci postavenou na novém API. Jeví se nepravděpodobné, že by kdy bylo zcela odstraněno. Zatím Howells přidal práci s kontextem většině interních souborových systémů (např. procfs, sysfs a kernfs), jakožto i NFS a AFS. Upozornil ale, že tato sorta patchů se vždycky bude potýkat s bikesheddingem.

Odkazy a zdroje

LWN.net
A new API for mounting filesystems

Další články z této rubriky

Jaderné noviny – přehled za duben 2024
Jaderné noviny – přehled za březen 2024
Jaderné noviny – přehled za únor 2024
Jaderné noviny – přehled za leden 2024
Jaderné noviny – přehled za prosinec 2023

Diskuse k tomuto článku

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.