On Thu, Jul 11, 2024 at 10:21:35AM +0200, Hanna Czenczek wrote:
On 10.07.24 20:42, Josef Bacik wrote:Got it, this makes sense, thanks for explaining it to me. You can add
On Wed, Jul 10, 2024 at 09:28:08AM +0200, Hanna Czenczek wrote:The mount point needs to be of the same mode as the root node of the mounted
On 09.07.24 19:56, Josef Bacik wrote:Ok so I think I had it backwards in my head, my apologies.
On Tue, Jul 09, 2024 at 01:19:16PM +0200, Hanna Czenczek wrote:This series is not about normal FUSE filesystems (file_system_type
Hi,All this does is make file an alias for something a little easier for users to
We want to be able to mount filesystems that just consist of one regular
file via virtio-fs, i.e. no root directory, just a file as the root
node.
While that is possible via FUSE itself (through the 'rootmode' mount
option, which is automatically set by the fusermount help program to
match the mount point's inode mode), there is no virtio-fs option yet
that would allow changing the rootmode from S_IFDIR to S_IFREG.
To do that, this series introduces a new 'file' mount option that does
precisely that. Alternatively, we could provide the same 'rootmode'
option that FUSE has, but as laid out in patch 1's commit description,
that option is a bit cumbersome for virtio-fs (in a way that it is not
for FUSE), and its usefulness as a more general option is limited.
read, which can easily be done in libfuse. Add the code to lib/mount.c to alias
'file' to turn it into rootmode=S_IFREG when it sends it to the kernel, it's not
necessary to do this in the kernel. Thanks,
fuse_fs_type, “fuse”), but about virtio-fs (file_system_type virtio_fs_type,
“virtiofs”), i.e. a case where libfuse and fusermount are not involved at
all. As far as I’m aware, mounting a virtio-fs filesystem with a
non-directory root inode is currently not possible at all.
That being said I still don't understand why this requires a change to virtiofs
at all.
I have a virtiofs thing attached to my VM. Inside the vm I do
mount -t virtiofs <name of thing I've attached to the vm> /directory
and then on the host machine, virtiofsd is a "normal" FUSE driver, except it's
talking over the socket you setup between the guest and the host. I assume this
is all correct?
So then the question is, why does it matter what virtiofsd is exposing? I guess
that's the better question. The guest shouldn't have to care if it's a
directory or a file right? The mountpoint is going to be a directory, whatever
is backing it shouldn't matter. Could you describe the exact thing you're
trying to accomplish? Thanks,
filesystem, or it’ll be inaccessible after mounting[1]. In this case, I
want to export a regular file as the root node, so the root node must be a
regular file, too:
host$ echo foo > /tmp/bar
host$ virtiofsd --shared-dir /tmp/bar --socket-path /tmp/viofsd.sock
--sandbox none
guest# mkdir /tmp/mnt-dir
guest# mount -t virtiofs virtiofs-tag /tmp/mnt-dir
guest# stat /tmp/mnt-dir
stat: cannot statx '/tmp/mnt-dir': Input/output error
guest# cat /tmp/mnt-dir
cat: /tmp/mnt-dir: Input/output error
guest# ls /tmp/mnt-dir
ls: cannot access '/tmp/mnt-dir': Input/output error
guest# umount /tmp/mnt-dir
(following with this series applied)
guest# touch /tmp/mnt-file
guest# mount -t virtiofs virtiofs-tag /tmp/mnt-file -o file
guest# stat /tmp/mnt-file
File: /tmp/mnt-file
Size: 4 Blocks: 8 IO Block: 4096 regular file
[...]
guest# cat /tmp/mnt-file
foo
guest# ls --file-type /tmp/mnt-file
/tmp/mnt-file
guest# ls --file-type /tmp
mnt-dir/
mnt-file
[...]
Reviewed-by: Josef Bacik <josef@xxxxxxxxxxxxxx>