[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] make qemu handle drbd properly
Ian Jackson wrote: > James Harper writes ("[Xen-devel] [PATCH] make qemu handle drbd properly"): > >> This attached patch allows qemu to accept a drbd: prefix and interpret >> it as a drbd resource. It then searches for it in /dev/drbd/by-res/ >> (which must be mapped via udev). It's against 4.0-testing. >> > > Jim, did any of your drbd tests involve HVM domains ? > No, they did not :(. But we have a similar hack (err, patch - attached for reference) for other external block scripts that we support. Interestingly, drbd is missing from the patch. I stumbled across this patch several months ago, but the original author is gone and I have not had time to consider a solution that will accommodate arbitrary external block scripts. Jim Index: xen-4.0.1-testing/tools/ioemu-qemu-xen/xenstore.c =================================================================== --- xen-4.0.1-testing.orig/tools/ioemu-qemu-xen/xenstore.c +++ xen-4.0.1-testing/tools/ioemu-qemu-xen/xenstore.c @@ -399,7 +399,7 @@ void xenstore_parse_domain_config(int hv char *buf = NULL; char *fpath = NULL, *bpath = NULL, *btype = NULL, *dev = NULL, *params = NULL, *drv = NULL; - int i, ret, is_tap; + int i, j, ret, is_tap; unsigned int len, num, hd_index, pci_devid = 0; BlockDriverState *bs; BlockDriver *format; @@ -491,12 +491,7 @@ void xenstore_parse_domain_config(int hv continue; free(danger_type); danger_type = xs_read(xsh, XBT_NULL, danger_buf, &len); - if (pasprintf(&buf, "%s/params", bpath) == -1) - continue; - free(params); - params = xs_read(xsh, XBT_NULL, buf, &len); - if (params == NULL) - continue; + /* read the name of the device */ if (pasprintf(&buf, "%s/type", bpath) == -1) continue; @@ -504,6 +499,35 @@ void xenstore_parse_domain_config(int hv drv = xs_read(xsh, XBT_NULL, buf, &len); if (drv == NULL) continue; + + free(params); + if (!strcmp(drv,"iscsi") || !strcmp(drv, "npiv") || + !strcmp(drv,"dmmd")) { + if (pasprintf(&buf, "%s/node", bpath) == -1) + continue; + + /* wait for block-[iscsi|npiv|dmmd] script to complete and populate the + * node entry. try 30 times (30 secs) */ + for (j = 0; j < 30; j++) { + params = xs_read(xsh, XBT_NULL, buf, &len); + if (params != NULL) + break; + sleep(1); + } + if (params == NULL) { + fprintf(stderr, "qemu: %s device not found -- timed out \n", drv); + continue; + } + } + else + { + if (pasprintf(&buf, "%s/params", bpath) == -1) + continue; + params = xs_read(xsh, XBT_NULL, buf, &len); + if (params == NULL) + continue; + } + /* Obtain blktap sub-type prefix */ if (!strcmp(drv, "tap") && params[0]) { char *offset = strchr(params, ':'); _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |