[libvirt PATCHv2 04/10] conf: qemu: add virtiofs fsdriver type

Peter Krempa pkrempa at redhat.com
Fri Jan 24 08:00:04 UTC 2020


On Thu, Jan 23, 2020 at 18:46:05 +0100, Ján Tomko wrote:
> Introduce a new 'virtiofs' driver type for filesystem.
> 
> <filesystem type='mount' accessmode='passthrough'>
>   <driver type='virtiofs'/>
>   <source dir='/path'/>
>   <target dir='mount_tag'>
>   <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
> </filesystem>
> 
> Signed-off-by: Ján Tomko <jtomko at redhat.com>
> ---
>  docs/formatdomain.html.in                     |  7 ++
>  docs/schemas/domaincommon.rng                 | 16 ++++
>  src/conf/domain_conf.c                        |  1 +
>  src/conf/domain_conf.h                        |  1 +
>  src/qemu/qemu_command.c                       |  4 +
>  src/qemu/qemu_domain.c                        |  4 +
>  src/qemu/qemu_domain_address.c                |  4 +
>  .../vhost-user-fs-fd-memory.xml               | 38 ++++++++++
>  .../vhost-user-fs-hugepages.xml               | 73 +++++++++++++++++++
>  .../vhost-user-fs-fd-memory.x86_64-latest.xml |  1 +
>  .../vhost-user-fs-hugepages.x86_64-latest.xml |  1 +
>  tests/qemuxml2xmltest.c                       |  3 +
>  12 files changed, 153 insertions(+)
>  create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
>  create mode 100644 tests/qemuxml2argvdata/vhost-user-fs-hugepages.xml
>  create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-fd-memory.x86_64-latest.xml
>  create mode 120000 tests/qemuxml2xmloutdata/vhost-user-fs-hugepages.x86_64-latest.xml
> 
> diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
> index 4db9c292b7..21f2a92ed6 100644
> --- a/docs/formatdomain.html.in
> +++ b/docs/formatdomain.html.in
> @@ -3921,6 +3921,11 @@
>      <target dir='/import/from/host'/>
>      <readonly/>
>    </filesystem>
> +  <filesystem type='mount' accessmode='passthrough'>
> +      <driver type='virtiofs'/>
> +      <source dir='/path'/>
> +      <target dir='mount_tag'>
> +  </filesystem>
>    ...
>  </devices>
>  ...</pre>
> @@ -3949,6 +3954,8 @@
>          while the value <code>immediate</code> means that a host writeback
>          is immediately triggered for all pages touched during a guest file
>          write operation <span class="since">(since 0.9.10)</span>.
> +        <span class="since">Since 6.1.0</span>, <code>type='virtiofs'</code>
> +        is also supported.

I'd expect some more description on the topic of virtiofs. Not even the
knowledge-base article is crosslinked from here.

Specifically what does 'mount_tag' mean and perhaps how to use it in the
guest.

The validator then forces accessmode to passthrough and that is not
mentioned here either.

>          </dd>
>          <dt><code>template</code></dt>
>          <dd>
> diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
> index 04854bf816..66757d3b63 100644
> --- a/docs/schemas/domaincommon.rng
> +++ b/docs/schemas/domaincommon.rng
> @@ -2625,6 +2625,22 @@
>            </optional>
>            <ref name='virtioOptions'/>
>          </group>
> +        <group>
> +          <attribute name="type">
> +            <value>virtiofs</value>
> +          </attribute>
> +          <optional>
> +            <attribute name="format">
> +              <ref name="storageFormat"/>
> +            </attribute>

The format attribute isn't documented and is rejected by the validator.
Why bother adding it to the schema?

> +          </optional>
> +          <optional>
> +            <attribute name="wrpolicy">
> +              <value>immediate</value>
> +            </attribute>

This doesn't seem to be documented either.

> +          </optional>
> +          <ref name='virtioOptions'/>
> +        </group>
>          <empty/>
>        </choice>
>      </element>

[...]

> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index c66b60fd21..974c2b79af 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -2687,6 +2687,10 @@ qemuBuildFilesystemCommandLine(virCommandPtr cmd,
>                  return -1;
>              break;
>  
> +        case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
> +            /* TODO: vhost-user-fs-pci */
> +            break;

IMO in these cases we should still fall through to error reporting
rather than format nothing but you don't have to change it.

> +
>          case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
>          case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
>          case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 38addc7b61..eb8e82b545 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -8275,6 +8275,10 @@ qemuDomainDeviceDefValidateFS(virDomainFSDefPtr fs,
>                         _("Filesystem driver type not supported"));
>          return -1;
>  
> +    case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
> +        /* TODO: vhost-user-fs-pci */
> +        return 0;
> +
>      case VIR_DOMAIN_FS_DRIVER_TYPE_LAST:
>      default:
>          virReportEnumRangeError(virDomainFSDriverType, fs->fsdriver);
> diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
> index 9e3bcc434d..3c6ac62ff5 100644
> --- a/src/qemu/qemu_domain_address.c
> +++ b/src/qemu/qemu_domain_address.c
> @@ -690,6 +690,10 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDefPtr dev,
>              }
>              break;
>  
> +        case VIR_DOMAIN_FS_DRIVER_TYPE_VIRTIOFS:
> +            /* vhost-user-fs-pci */
> +            return virtioFlags;
> +
>          case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP:
>          case VIR_DOMAIN_FS_DRIVER_TYPE_NBD:
>          case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP:
> diff --git a/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
> new file mode 100644
> index 0000000000..b02eb5cb2b
> --- /dev/null
> +++ b/tests/qemuxml2argvdata/vhost-user-fs-fd-memory.xml
> @@ -0,0 +1,38 @@
> +<domain type='kvm'>
> +  <name>guest</name>
> +  <uuid>126f2720-6f8e-45ab-a886-ec9277079a67</uuid>
> +  <memory unit='KiB'>14680064</memory>
> +  <currentMemory unit='KiB'>14680064</currentMemory>
> +  <memoryBacking>
> +    <source type='file'/>
> +    <access mode='shared'/>
> +  </memoryBacking>
> +  <vcpu placement='static'>2</vcpu>
> +  <os>
> +    <type arch='x86_64' machine='pc'>hvm</type>
> +    <boot dev='hd'/>
> +  </os>
> +  <cpu>
> +    <numa>
> +      <cell id='0' cpus='0-1' memory='14680064' unit='KiB' memAccess='shared'/>
> +    </numa>

This is possibly worth mentioning too. Especially if you don't
cross-link to the knowledge-base in patch 10.


The rest looks good. I'm willing to review just the improved
documentation if you reply with the changes.




More information about the libvir-list mailing list