On Tue, Oct 31, 2023 at 12:52:41PM -0300, Fabiano Rosas wrote: > Daniel P. Berrangé <berra...@redhat.com> writes: > > > > I guess I'm not seeing the problem still. A single FD is passed across > > from libvirt, but QEMU is free to turn that into *many* FDs for its > > internal use, using dup() and then setting O_DIRECT on as many/few of > > the dup()d FDs as its wants to. > > The problem is that duplicated FDs share the file status flags. If we > set O_DIRECT on the multifd channels and the main thread happens to do > an unaligned write with qemu_file_put* then the filesystem will fail > that write.
Doh, I had forgotten that sharing. Do we have any synchronization between multifd channels and the main thread ? eg does the main thread wait for RAM sending completion before carrying on writing other non-RAM data ? If not, is it at all practical to add such synchronization. IOW, to let us turn on O_DIRECT at start of a RAM section and turn it off again afterwards. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|