>
> Hi James,
>
> thank you for your fast reply. The VMs are not PV domains, so the
problem
> seems to be pretty much the same as yours. I would be very glad if you
could
> publish the patch, so that I can test if it works for me.
>
This is the patch I'm using for drbd. You can probably remove the drbd
bit if it doesn't interest you. If line wrapping makes the patch
unusable let me know and I'll attach it as a file. It's against 3.4.x
but is simple enough that you should be able to re-invent it for a later
or earlier version. Obviously if qemu isn't the thing that's having
problems then this patch won't help.
James
diff --git a/xenstore.c b/xenstore.c
index 9360771..bd0b5e0 100644
--- a/xenstore.c
+++ b/xenstore.c
@@ -317,6 +317,7 @@ void xenstore_parse_domain_config(int hvm_domid)
unsigned int len, num, hd_index, pci_devid = 0;
BlockDriverState *bs;
BlockDriver *format;
+ int retry_count;
/* paths controlled by untrustworthy guest, and values read from
them */
char *danger_path;
@@ -428,6 +429,14 @@ void xenstore_parse_domain_config(int hvm_domid)
params = newparams;
format = &bdrv_raw;
}
+ /* handle drbd mapping */
+ if (!strcmp(drv, "drbd")) {
+ char *newparams = malloc(17 + strlen(params) + 1);
+ sprintf(newparams, "/dev/drbd/by-res/%s", params);
+ free(params);
+ params = newparams;
+ format = &bdrv_raw;
+ }
#if 0
/* Phantom VBDs are disabled because the use of paths
@@ -500,8 +509,15 @@ void xenstore_parse_domain_config(int hvm_domid)
}
}
pstrcpy(bs->filename, sizeof(bs->filename), params);
- if (bdrv_open2(bs, params, BDRV_O_CACHE_WB /* snapshot and
write-back */, format) < 0)
- fprintf(stderr, "qemu: could not open vbd '%s' or hard
disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
format ? format->format_name : "0");
+ retry_count = 0;
+ while ((ret = bdrv_open2(bs, params, BDRV_O_CACHE_WB /*
snapshot and write-back */, format)) < 0)
+ {
+ if (retry_count++ > 10)
+ break;
+ sleep(1);
+ }
+ if (ret < 0)
+ fprintf(stderr, "qemu: could not open vbd '%s' or hard
disk image '%s' (drv '%s' format '%s')\n", buf, params, drv ? drv : "?",
format ? format->format_name : "0");
}
drives_table[nb_drives].bdrv = bs;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|