[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] Race condition in /etc/xen/scripts/block
> > 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |