|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] [RFC] Xen PV backend: Move call to bdrv_new from blk_init to blk_connect
On Mon, 1 Apr 2013, Alex Bligh wrote:
> This commit delays the point at which bdrv_new (and hence blk_open
> on the underlying device) is called from blk_init to blk_connect.
> This ensures that in an inbound live migrate, the block device is
> not opened until it has been closed at the other end. This is in
> preparation for supporting devices with open/close consistency
> without using O_DIRECT. This commit does NOT itself change O_DIRECT
> semantics.
>
> Note this patch is compile-tested only.
I think the patch looks good, just a minor comment.
> Signed-off-by: Alex Bligh <alex@xxxxxxxxxxx>
> ---
> hw/xen_disk.c | 73
> +++++++++++++++++++++++++++++++++------------------------
> 1 file changed, 42 insertions(+), 31 deletions(-)
>
> diff --git a/hw/xen_disk.c b/hw/xen_disk.c
> index 69e1d9d..3cccea8 100644
> --- a/hw/xen_disk.c
> +++ b/hw/xen_disk.c
> @@ -701,7 +701,7 @@ static void blk_alloc(struct XenDevice *xendev)
> static int blk_init(struct XenDevice *xendev)
> {
> struct XenBlkDev *blkdev = container_of(xendev, struct XenBlkDev,
> xendev);
> - int index, qflags, info = 0;
> + int info = 0;
>
> /* read xenstore entries */
> if (blkdev->params == NULL) {
> @@ -744,10 +744,7 @@ static int blk_init(struct XenDevice *xendev)
> }
>
> /* read-only ? */
> - qflags = BDRV_O_NOCACHE | BDRV_O_CACHE_WB | BDRV_O_NATIVE_AIO;
> - if (strcmp(blkdev->mode, "w") == 0) {
> - qflags |= BDRV_O_RDWR;
> - } else {
> + if (strcmp(blkdev->mode, "w")) {
> info |= VDISK_READONLY;
> }
>
> @@ -756,6 +753,44 @@ static int blk_init(struct XenDevice *xendev)
> info |= VDISK_CDROM;
> }
>
> + blkdev->file_blk = BLOCK_SIZE;
> +
> + /* fill info
> + * Temporarily write zero sectors as we won't know file size until
> + * bdrv_new has been called. blk_connect corrects this.
> + */
> + xenstore_write_be_int(&blkdev->xendev, "feature-flush-cache", 1);
> + xenstore_write_be_int(&blkdev->xendev, "feature-persistent", 1);
> + xenstore_write_be_int(&blkdev->xendev, "info", info);
> + xenstore_write_be_int(&blkdev->xendev, "sector-size", BLOCK_SIZE);
> + xenstore_write_be_int(&blkdev->xendev, "sectors", 0);
> + return 0;
There is no need to fill the sector-size and sectors info here, you can
do it later in blk_connect.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |