Le dimanche 10 décembre 2023, 21 h 40 min 22 s CET Samuel Thibault a écrit :
> Vincent Tondellier via FRsAG, le dim. 10 déc. 2023 21:26:00 +0100, a ecrit:
> > Le dimanche 10 décembre 2023, 11 h 47 min 05 s CET Romain a écrit :
> > > Pour ceux qui auraient raté l'actu :
> > > - https://twitter.com/debian/status/1733559140914749547
> > > - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1057843
> > > 
> > > Ne pas installer le paquet 6.1.64-1 du kernel.
> > 
> > Ca tombe bien, ca fait une semaine que mon serveur de fichier tourne avec
> > ce noyau. J'ai du le rebooter pour patcher le bug de zfs qui pouvait
> > corrompre le fs, et j'ai voulu éviter un autre reboot en l'installant
> > depuis b-p-u ...
> > 
> > De ce que je comprends d'après les commits, ca n'affecte que les fichiers
> > ouverts en O_DIRECT|O_SYNC|O_(RDWR|WRONLY) et en cas de crash : ils
> > risquent de se retrouver tronqués.
> 
> Non, ça c'est le scénario corrigé par le patch fautif... Le problème
> c'est qu'il manquait un autre patch pour que le premier patch se
> comporte correctement, d'où corruption des données. Le cas qui pose
> problème, c'est O_DIRECT tout court, la position dans le fichier n'est
> pas mise à jour en fin d'opération d'entrée/sortie, de là les
> données peuvent être écrites un peu n'importe où.
> 
> https://lore.kernel.org/stable/20231205122122.dfhhoaswsfscuhc3@quack3/

OK, autant pour moi, je suis pas réveillé aujourd'hui, je suis effectivement 
parti du premier patch ...

Ca ne change pas grand chose pour moi, je n'ai pas d'applications utilisant 
O_DIRECT avec ext4 sur les serveurs affectés (et le serveur DB n'est pas dans 
le lot, encore en deb11), mais c'est effectivement un peu plus gênant ...

> > Le cas est donc assez peu courant vu que O_DIRECT est peu utilisé,
> > mis a part peut être pour certaines bases de données (pas PostgreSQL
> > en tout cas).
> 
> grep O_DIRECT dans le source de postgresql-16 indique plutôt que si.

Uniquement dans une configuration debug non standard et non recommandée :

https://www.postgresql.org/docs/current/runtime-config-developer.html#GUC-DEBUG-IO-DIRECT

debug_io_direct dans la conf, io_direct_flags dans le code.

A ma connaissance toutes les I/O (data, wal, etc) de PostgreSQL (hors 
configuration exotique) utilisent le chemin classique (et bien testé) 
synchrone avec buffer et fdatasync.

Vincent





_______________________________________________
Liste de diffusion du %(real_name)s
http://www.frsag.org/

Répondre à