Index: xen-3.3.1-testing/tools/ioemu-remote/xenstore.c =================================================================== --- xen-3.3.1-testing.orig/tools/ioemu-remote/xenstore.c +++ xen-3.3.1-testing/tools/ioemu-remote/xenstore.c @@ -153,7 +153,7 @@ void xenstore_parse_domain_config(int hv char *buf = NULL, *path; char *fpath = NULL, *bpath = NULL, *btype = NULL, *dev = NULL, *params = NULL, *type = NULL, *drv = NULL; - int i, any_hdN = 0, ret, is_tap; + int i, j, any_hdN = 0, ret, is_tap; unsigned int len, num, hd_index, pci_devid = 0; BlockDriverState *bs; BlockDriver *format; @@ -238,12 +238,7 @@ void xenstore_parse_domain_config(int hv continue; free(type); type = xs_read(xsh, XBT_NULL, 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; @@ -251,6 +246,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")) + { + if (pasprintf(&buf, "%s/node", bpath) == -1) + continue; + + /* wait for block-iscsi 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: iscsi device not found -- timed out \n"); + 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, ':');