return ret;
}
-char * libxl__device_disk_local_attach(libxl__gc *gc, libxl_device_disk *disk)
+char * libxl__device_disk_local_attach(libxl__gc *gc,
+ const libxl_device_disk *in_disk,
+ libxl_device_disk *disk)
{
libxl_ctx *ctx = gc->owner;
char *dev = NULL;
char *ret = NULL;
int rc;
+ if (in_disk->pdev_path == NULL)
+ return NULL;
+
+ memcpy(disk, in_disk, sizeof(libxl_device_disk));
+ disk->pdev_path = libxl__strdup(gc, in_disk->pdev_path);
+ if (in_disk->script != NULL)
+ disk->script = libxl__strdup(gc, in_disk->script);
+ disk->vdev = NULL;
+
rc = libxl__device_disk_setdefault(gc, disk);
if (rc) goto out;
" attach a qdisk image if the format is not raw");
break;
}
- LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "locally attaching qdisk %s\n",
- disk->pdev_path);
+ LOG(DEBUG, "locally attaching qdisk %s", in_disk->pdev_path);
dev = disk->pdev_path;
break;
default:
if (bl->outputdir) libxl__remove_directory(gc, bl->outputdir);
if (bl->diskpath) {
- libxl__device_disk_local_detach(gc, bl->disk);
+ libxl__device_disk_local_detach(gc, &bl->localdisk);
free(bl->diskpath);
bl->diskpath = 0;
}
goto out;
}
- bl->diskpath = libxl__device_disk_local_attach(gc, bl->disk);
+ bl->diskpath = libxl__device_disk_local_attach(gc, bl->disk, &bl->localdisk);
if (!bl->diskpath) {
rc = ERROR_FAIL;
goto out;
* a device.
*/
_hidden char * libxl__device_disk_local_attach(libxl__gc *gc,
- libxl_device_disk *disk);
+ const libxl_device_disk *in_disk,
+ libxl_device_disk *new_disk);
_hidden int libxl__device_disk_local_detach(libxl__gc *gc,
libxl_device_disk *disk);
libxl__bootloader_console_callback *console_available;
const libxl_domain_build_info *info;
libxl_device_disk *disk;
+ /* Should be zeroed by caller on entry. Will be filled in by
+ * bootloader machinery; represents the local attachment of the
+ * disk for the benefit of the bootloader. Must be detached by
+ * the caller using libxl__device_disk_local_detach, but only
+ * after the domain's kernel and initramfs have been loaded into
+ * memory and the file references disposed of. */
+ libxl_device_disk localdisk;
uint32_t domid;
/* outputs:
* - caller must initialise kernel and ramdisk to point to file