On Fri, Jan 06, 2023 at 14:33:51 +0100, Pavel Hrdina wrote:
On Thu, Jan 05, 2023 at 05:30:18PM +0100, Peter Krempa wrote:
> Prepare the internal data for passing FDs instead of having qemu open
> the file internally.
>
> Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
> ---
> src/qemu/qemu_block.c | 31 ++++++++++++++++++++++++++++---
> src/qemu/qemu_command.c | 22 ++++++++++++++++++++++
> 2 files changed, 50 insertions(+), 3 deletions(-)
>
> diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c
> index 8a6f601b29..a672ad6f54 100644
> --- a/src/qemu/qemu_block.c
> +++ b/src/qemu/qemu_block.c
> @@ -673,22 +673,47 @@ qemuBlockStorageSourceGetSshProps(virStorageSource *src)
>
> static virJSONValue *
> qemuBlockStorageSourceGetFileProps(virStorageSource *src,
> - bool onlytarget)
> + bool onlytarget,
> + virTristateBool *autoReadOnly,
> + virTristateBool *readOnly)
> {
> + const char *path = src->path;
> const char *iomode = NULL;
> const char *prManagerAlias = NULL;
> virJSONValue *ret = NULL;
>
> if (!onlytarget) {
> + qemuDomainStorageSourcePrivate *srcpriv =
QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(src);
> +
> if (src->pr)
> prManagerAlias = src->pr->mgralias;
>
> if (src->iomode != VIR_DOMAIN_DISK_IO_DEFAULT)
> iomode = virDomainDiskIoTypeToString(src->iomode);
> +
> + if (srcpriv && srcpriv->fdpass) {
> + path = qemuFDPassGetPath(srcpriv->fdpass);
> +
> + /* when passing a FD to qemu via the /dev/fdset mechanism qemu
> + * fetches the appropriate FD from the fdset by checking that it has
> + * the correct accessmode. Now with 'auto-read-only' in effect
qemu
> + * wants to use a read-only FD first. If the user didn't pass
multiple
> + * FDs the feature will not work regardless, so we'll disable it.
*/
What happens if users passes multiple FDs but none of them are
read-only? Otherwise looks good so if this is not an issue
qemu will complain that it can't find the appropriate one. Given that
this is for very specific use cases I didn't want to overdo it with
validation.