[Virtio-fs] [PATCH] init/do_mounts.c: add virtiofs root fs support

Stefan Hajnoczi stefanha at redhat.com
Tue Sep 17 15:18:29 UTC 2019


On Mon, Sep 09, 2019 at 09:00:39AM +0200, Stefan Hajnoczi wrote:
> On Fri, Sep 06, 2019 at 09:16:04PM +0200, Richard Weinberger wrote:
> > On Fri, Sep 6, 2019 at 1:15 PM Stefan Hajnoczi <stefanha at redhat.com> wrote:
> > >
> > > Make it possible to boot directly from a virtiofs file system with tag
> > > 'myfs' using the following kernel parameters:
> > >
> > >   rootfstype=virtiofs root=myfs rw
> > >
> > > Booting directly from virtiofs makes it possible to use a directory on
> > > the host as the root file system.  This is convenient for testing and
> > > situations where manipulating disk image files is cumbersome.
> > >
> > > Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
> > > ---
> > > This patch is based on linux-next (next-20190904) but should apply
> > > cleanly to other virtiofs trees.
> > >
> > >  init/do_mounts.c | 10 ++++++++++
> > >  1 file changed, 10 insertions(+)
> > >
> > > diff --git a/init/do_mounts.c b/init/do_mounts.c
> > > index 9634ecf3743d..030be2f1999a 100644
> > > --- a/init/do_mounts.c
> > > +++ b/init/do_mounts.c
> > > @@ -554,6 +554,16 @@ void __init mount_root(void)
> > >                         change_floppy("root floppy");
> > >         }
> > >  #endif
> > > +#ifdef CONFIG_VIRTIO_FS
> > > +       if (root_fs_names && !strcmp(root_fs_names, "virtiofs")) {
> > > +               if (!do_mount_root(root_device_name, "virtiofs",
> > > +                                  root_mountflags, root_mount_data))
> > > +                       return;
> > > +
> > > +               panic("VFS: Unable to mount root fs \"%s\" from virtiofs",
> > > +                     root_device_name);
> > > +       }
> > > +#endif
> > 
> > I think you don't need this, you can abuse a hack for mtd/ubi in
> > prepare_namespace().
> > At least for 9p it works well:
> > qemu-system-x86_64 -m 4G -M pc,accel=kvm -nographic -kernel
> > arch/x86/boot/bzImage -append "rootfstype=9p
> > rootflags=trans=virtio,version=9p2000.L root=mtdfake console=ttyS0 ro
> > init=/bin/sh" -virtfs
> > local,id=rootfs,path=/,security_model=passthrough,mount_tag=mtdfake
> 
> That is worse because:
> 1. The file system must be named "mtd*" or "ubi*".
> 2. When mounting fails you get confusing error messages about block
>    devices and partitions.  These do not apply to virtio-fs or
>    virtio-9p.
> 
> > If this works too for virtiofs I suggest to cleanup the hack and
> > generalize it. B-)
> 
> Why mtd and ubi block devices even have a special case?  Maybe this code
> was added because ROOT_DEV = name_to_dev_t(root_device_name) doesn't
> work for "mtd:partition" device names so the regular CONFIG_BLOCK code
> path doesn't work for these devices.
> 
> Given the ordering/fallback logic in prepare_namespace()/mount_root() I
> don't feel comfortable changing other code paths.  It's likely to break
> something.
> 
> If you or others have a concrete suggestion for how to generalize this
> I'm happy to try implementing it.

Ping

Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/virtio-fs/attachments/20190917/bc736241/attachment.sig>


More information about the Virtio-fs mailing list