From 2836e73adcd994de071f4eec1aa538a5ca849118 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Fri, 4 Sep 2009 16:19:54 +0100 Subject: [PATCH] Fix to eject cdrom on HVM Domain We tried to eject cdrom(/dev/hdc) on HVM Domain. But, cdrom media are not ejected from the cdrom device on HostOS. The module to eject the cdrom device has already been implemented in qemu-dm. But, all devices are opened as raw device for VBD. Therefore, the module to eject the cdrom device is not work. The cdrom device was corrected to open as a physical device on HostOS. When eject is executed on HVM Domain, cdrom media are ejected from the cdrom device on HostOS. This patch corrected the problem. Signed-off-by: Takanori Kasai --- xenstore.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/xenstore.c b/xenstore.c index aee96f0fe..bdc25c3d4 100644 --- a/xenstore.c +++ b/xenstore.c @@ -107,7 +107,14 @@ static void insert_media(void *opaque) for (i = 0; i < MAX_DRIVES + 1; i++) { bs = drives_table[i].bdrv; if (media_filename[i] && bs && bs->filename[0] == '\0') { - bdrv_open2(bs, media_filename[i], 0, &bdrv_raw); + BlockDriver *format; + if ( strstart(media_filename[i], "/dev/cd", NULL) + || strstart(media_filename[i], "/dev/scd", NULL)) + format = &bdrv_host_device; + else + format = &bdrv_raw; + + bdrv_open2(bs, media_filename[i], 0, format); pstrcpy(bs->filename, sizeof(bs->filename), media_filename[i]); free(media_filename[i]); media_filename[i] = NULL; @@ -533,7 +540,11 @@ void xenstore_parse_domain_config(int hvm_domid) } else if (!strcmp(drv,"file")) { format = &bdrv_raw; } else if (!strcmp(drv,"phy")) { - format = &bdrv_raw; + if (strstart(params, "/dev/cd", NULL) + || strstart(params, "/dev/scd", NULL)) + format = &bdrv_host_device; + else + format = &bdrv_raw; } else { format = bdrv_find_format(drv); if (!format) { -- 2.39.5