[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH qemu-xen 4.10 & 4.11] xen_disk: Disable file locking for the PV disk backend



On Wed, May 22, 2019 at 03:51:40PM +0100, Anthony PERARD wrote:
> Since QEMU 2.10 (or qemu-xen-4.10), qemu locks disk images to avoid
> them been re-opened in a different qemu process.
> 
> With Xen, there are two issues:
> - For HVM guests, a disk image can be open twice! One by the
>   emulation driver, and one by the PV backend.
> - During migration, the qemu process of the newly spawned domain may
>   attempt to access the disk image before the domain been migrated
>   and the qemu process are been completely destroyed.
> 
> Migration of HVM guest as been taken care of in libxl, but migration
> of PV guest with qdisk and HVM guest attempting to access the PV disk
> before unplugging the emulated disk are still an issue.
> 
> For these reasons, we don't want to have QEMU use a locking mechanism
> with the PV backend.
> 
> This is already done by db9ff46eeb in QEMU upstream, or QEMU 4.0.
> 
> Affected version of QEMU are:
> - qemu-xen of Xen 4.10 and 4.11
> - QEMU 2.10, 2.11, 2.12, 3.0 and 3.1
> 
> Signed-off-by: Anthony PERARD <anthony.perard@xxxxxxxxxx>
> 
> ---
> 
> Hi Olaf, Roger, Wei,
> 
> Instead of a fix in libxl (with the reverted patch "libxl: fix
> migration of PV and PVH domUs with and without qemu"), what do you
> think of this QEMU patch?  It is much simpler that trying to work
> around the issue in libxl, and it fix one more problem that still
> exist.
> 
> This patch is only for stable branches as Xen unstable already have a
> qemu with a similar patch.
> 
> Can you give it a try with one of the affected qemu? (qemu-xen-4.10 or
> qemu-xen-4.11)
> 
> Thanks,

Thanks for stepping up. :-)

> ---
>  hw/block/xen_disk.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
> index e431bd89e8..cbff174a98 100644
> --- a/hw/block/xen_disk.c
> +++ b/hw/block/xen_disk.c
> @@ -1084,11 +1084,18 @@ static int blk_connect(struct XenDevice *xendev)
>          Error *local_err = NULL;
>          QDict *options = NULL;
>  
> +        options = qdict_new();
> +
>          if (strcmp(blkdev->fileproto, "<unset>")) {
> -            options = qdict_new();
>              qdict_put_str(options, "driver", blkdev->fileproto);
>          }
>  
> +        /*
> +         * It is necessary to turn file locking off as an emulated device
> +         * may have already opened the same image file.
> +         */
> +        qdict_put_str(options, "file.locking", "off");
> +
>          /* setup via xenbus -> create new block driver instance */
>          xen_pv_printf(&blkdev->xendev, 2, "create new bdrv (xenbus 
> setup)\n");
>          blkdev->blk = blk_new_open(blkdev->filename, NULL, options,
> -- 
> Anthony PERARD
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.