On Mon, Oct 05, 2020 at 19:40:14 +0100, Brian Turek wrote: > Expose QEMU's 9pfs 'fmode' and 'dmode' options via attributes on the > 'filesystem' node in the domain XML. These options control the creation > mode of files and directories, respectively, when using > accessmode=mapped. QEMU defaults to creating files with mode 0600 and > directories with mode 0700. > > Signed-off-by: Brian Turek <brian.turek@xxxxxxxxx> > --- > src/conf/domain_conf.c | 27 ++++++++ > src/conf/domain_conf.h | 2 + > src/qemu/qemu_command.c | 6 ++ > src/qemu/qemu_validate.c | 18 ++++++ This patch still mixes the XML bits with the qemu implementation. > .../virtio-9p-createmode.x86_64-latest.args | 45 ++++++++++++++ > .../qemuxml2argvdata/virtio-9p-createmode.xml | 58 ++++++++++++++++++ > .../virtio-9p-createmode.x86_64-latest.xml | 61 +++++++++++++++++++ Compilation of the tree doesn't pass 'virschematest' after this patch as you are adding the RNG schema after adding the XML. > tests/qemuxml2xmltest.c | 1 + You are missing a change to qemuxml2argvtest to actually invoke also the testing of the command line formatter ... > 8 files changed, 218 insertions(+) > create mode 100644 tests/qemuxml2argvdata/virtio-9p-createmode.x86_64-latest.args ... but you've included the output file. > create mode 100644 tests/qemuxml2argvdata/virtio-9p-createmode.xml > create mode 100644 tests/qemuxml2xmloutdata/virtio-9p-createmode.x86_64-latest.xml > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 175b632a38..e80b3b7ef6 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c [...] > @@ -11524,6 +11526,24 @@ virDomainFSDefParseXML(virDomainXMLOptionPtr xmlopt, > def->accessmode = VIR_DOMAIN_FS_ACCESSMODE_PASSTHROUGH; > } > > + fmode = virXMLPropString(node, "fmode"); > + if (fmode) { > + if (virStrToLong_uip(fmode, NULL, 8, &def->fmode) < 0) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("invalid fmode: '%s'"), fmode); > + goto error; > + } > + } > + > + dmode = virXMLPropString(node, "dmode"); > + if (dmode) { > + if (virStrToLong_uip(dmode, NULL, 8, &def->dmode) < 0) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("invalid dmode: '%s'"), dmode); > + goto error; > + } Both errors should be VIR_ERR_XML_ERROR. > + } > + > model = virXMLPropString(node, "model"); > if (model) { > if ((def->model = virDomainFSModelTypeFromString(model)) < 0 || > @@ -26211,6 +26231,13 @@ virDomainFSDefFormat(virBufferPtr buf, > } > if (def->multidevs) > virBufferAsprintf(buf, " multidevs='%s'", multidevs); > + > + if (def->fmode) > + virBufferAsprintf(buf, " fmode='%04o'", def->fmode); > + > + if (def->dmode) > + virBufferAsprintf(buf, " dmode='%04o'", def->dmode); > + See reply on cover letter for potential problems. > virBufferAddLit(buf, ">\n"); > > virBufferAdjustIndent(buf, 2); [...] > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index 476cf6972e..b2da53c664 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c > @@ -2275,6 +2275,12 @@ qemuBuildFSStr(virDomainFSDefPtr fs) > } else if (fs->multidevs == VIR_DOMAIN_FS_MULTIDEVS_WARN) { > virBufferAddLit(&opt, ",multidevs=warn"); > } > + if (fs->fmode) { > + virBufferAsprintf(&opt, ",fmode=%04o", fs->fmode); > + } > + if (fs->dmode) { > + virBufferAsprintf(&opt, ",dmode=%04o", fs->dmode); See reply on cover letter for potential problems. > + } > } else if (fs->fsdriver == VIR_DOMAIN_FS_DRIVER_TYPE_HANDLE) { > /* removed since qemu 4.0.0 see v3.1.0-29-g93aee84f57 */ > virBufferAddLit(&opt, "handle");