XFS Barriers und Der neue 2.6.27 Kernel

Seit ich ein bisschen bei BTRFS mitmische, bin ich drauf und dran mich immer tiefer in die Materie des Linux Kernel einzuarbeiten, da ich einfach neugierig bin. Klingt komisch, ist aber so. Und so kam es, dass ich mir den eben neuen 2.6.27er Kernel zu Gemüte führte und starte und eine Fehlermeldung sehe, nebst einigen Fehlern beim Löschen von Verzeichnissen:

Oct 9 07:50:44 pavilion Filesystem "sda9": xlog_iodone: Barriers are no longer supported by device. Disabling barriers

Barriers sind sozusagen Sperren auf Dateisystem-Ebene, welche eigentlich dafür sorgen sollten, dass die Daten in der richtigen Reihenfolge auf der Platte ankommen. Seit einer Überarbeitung dieser, genauergesagt der Funktion xlog_iodone ist der Teufel los:

Wird nämlich nun einem Buffer das XBF_ORDERED Flag gelöscht, wird angenommen, dass keine Barriers (mehr) unterstützt werden. Was bei dem Ansatz jedoch übersehen wurde ist, dass wenn das Log nicht in einem Stück geschrieben wird, ebenfalls das XBF_ORDERED Flag nicht gesetzt wird. Das Ergebnis ist, dass die Barriers somit ziemlich schnell deaktiviert werden und wir bei einem Absturz oder beim Arbeiten mit Verzeichnissen auf ‚komisches Verhalten‘ stoßen und die Datensicherheit gefährdet sein kann.

Als ich im btrfs Channel auf Freenode darüber berichtete, ob eventuell anderen Jungs etwas aufgefallen sei, stieß Christoph Hellwig dazu, welcher an der Entwicklung von XFS beteiligt ist und schrieb einen entsprechenden Patch, welcher es leider nicht mehr in 2.6.27 geschafft hat.

Für alle die sich hier ebenfalls mit diesem Problem ärgern müssen, stelle ich den Patch hier zur Verfügung. Wie man Patches benutzt, beschreibt mein Blog-Kollege Stargazer in diesem Posting ausführlich.