]> git.proxmox.com Git - mirror_qemu.git/commit
virtiofsd: Add basic support for FUSE_SYNCFS request
authorGreg Kurz <groug@kaod.org>
Tue, 15 Feb 2022 18:15:29 +0000 (19:15 +0100)
committerDr. David Alan Gilbert <dgilbert@redhat.com>
Thu, 17 Feb 2022 17:22:26 +0000 (17:22 +0000)
commit45b04ef48dbbeb18d93c2631bf5584ac493de749
treea57ae7b4c6878112c30837dcc07b2a95bdde5e80
parent963061dc11e762285a6c1825b9c09e48cc8c6f5f
virtiofsd: Add basic support for FUSE_SYNCFS request

Honor the expected behavior of syncfs() to synchronously flush all data
and metadata to disk on linux systems.

If virtiofsd is started with '-o announce_submounts', the client is
expected to send a FUSE_SYNCFS request for each individual submount.
In this case, we just create a new file descriptor on the submount
inode with lo_inode_open(), call syncfs() on it and close it. The
intermediary file is needed because O_PATH descriptors aren't
backed by an actual file and syncfs() would fail with EBADF.

If virtiofsd is started without '-o announce_submounts' or if the
client doesn't have the FUSE_CAP_SUBMOUNTS capability, the client
only sends a single FUSE_SYNCFS request for the root inode. The
server would thus need to track submounts internally and call
syncfs() on each of them. This will be implemented later.

Note that syncfs() might suffer from a time penalty if the submounts
are being hammered by some unrelated workload on the host. The only
solution to prevent that is to avoid shared mounts.

Signed-off-by: Greg Kurz <groug@kaod.org>
Message-Id: <20220215181529.164070-2-groug@kaod.org>
Reviewed-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
tools/virtiofsd/fuse_lowlevel.c
tools/virtiofsd/fuse_lowlevel.h
tools/virtiofsd/passthrough_ll.c
tools/virtiofsd/passthrough_seccomp.c