* [Qemu-devel] [PATCH] don't exit if cdrom media fails to open @ 2009-06-09 13:41 David Ahern 2009-06-09 22:22 ` Mark McLoughlin 0 siblings, 1 reply; 4+ messages in thread From: David Ahern @ 2009-06-09 13:41 UTC (permalink / raw) To: qemu-devel This patch allows a VM to continue even if the cdrom image is not accessible at VM boot time. It allows a boot progression similar to real hardware (e.g., try cd, then disk). For example, qemu-system-x86_64 -cdrom /dev/dvd -hda disk.img -boot dc If there is no media in the tray, qemu currently exits with the message: qemu: could not open disk image /dev/dvd With this patch, the message is still displayed, but qemu continues. It first tries to boot from the cdrom and then falls back to the disk. Signed-off-by: David Ahern <dsahern@gmail.com> --- diff --git a/vl.c b/vl.c index fcf8532..bd3709c 100644 --- a/vl.c +++ b/vl.c @@ -152,6 +152,7 @@ int main(int argc, char **argv) #include "qemu-char.h" #include "cache-utils.h" #include "block.h" +#include "block_int.h" #include "dma.h" #include "audio/audio.h" #include "migration.h" @@ -2551,7 +2552,8 @@ int drive_init(struct drive_opt *arg, int snapshot, void *opaque) if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { fprintf(stderr, "qemu: could not open disk image %s\n", file); - return -1; + if (bdrv->type != BDRV_TYPE_CDROM) + return -1; } if (bdrv_key_required(bdrv)) autostart = 0; ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] don't exit if cdrom media fails to open 2009-06-09 13:41 [Qemu-devel] [PATCH] don't exit if cdrom media fails to open David Ahern @ 2009-06-09 22:22 ` Mark McLoughlin 2009-06-09 23:34 ` David Ahern 0 siblings, 1 reply; 4+ messages in thread From: Mark McLoughlin @ 2009-06-09 22:22 UTC (permalink / raw) To: David Ahern; +Cc: qemu-devel, Cole Robinson Hi David, On Tue, 2009-06-09 at 07:41 -0600, David Ahern wrote: > This patch allows a VM to continue even if the cdrom image is not > accessible at VM boot time. It allows a boot progression similar to real > hardware (e.g., try cd, then disk). > > For example, > > qemu-system-x86_64 -cdrom /dev/dvd -hda disk.img -boot dc > > If there is no media in the tray, qemu currently exits with the message: > qemu: could not open disk image /dev/dvd > > With this patch, the message is still displayed, but qemu continues. It > first tries to boot from the cdrom and then falls back to the disk. > > Signed-off-by: David Ahern <dsahern@gmail.com> > > --- > > diff --git a/vl.c b/vl.c > index fcf8532..bd3709c 100644 > --- a/vl.c > +++ b/vl.c > @@ -152,6 +152,7 @@ int main(int argc, char **argv) > #include "qemu-char.h" > #include "cache-utils.h" > #include "block.h" > +#include "block_int.h" > #include "dma.h" > #include "audio/audio.h" > #include "migration.h" > @@ -2551,7 +2552,8 @@ int drive_init(struct drive_opt *arg, int > snapshot, void *opaque) > if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { > fprintf(stderr, "qemu: could not open disk image %s\n", > file); > - return -1; > + if (bdrv->type != BDRV_TYPE_CDROM) > + return -1; I think Cole's patch here: https://bugzilla.redhat.com/show_bug.cgi?id=473154#c15 fixes the same problem? Certainly, it seems to me that any code requiring the path to be e.g. /dev/cd is doomed and should be fixed as Cole suggests? Cheers, Mark. (Patch below for convenience) --- new/qemu/block-raw-posix.c 2009-03-28 15:05:16.000000000 -0400 +++ qemu-kvm-0.10/qemu/block-raw-posix.c 2009-04-06 18:57:50.000000000 -0400 @@ -942,16 +942,21 @@ static int hdev_open(BlockDriverState *b s->type = FTYPE_FILE; #if defined(__linux__) - if (strstart(filename, "/dev/cd", NULL)) { + if (strstart(filename, "/dev/cd", NULL) || + bs->type == BDRV_TYPE_CDROM) { /* open will not fail even if no CD is inserted */ open_flags |= O_NONBLOCK; s->type = FTYPE_CD; - } else if (strstart(filename, "/dev/fd", NULL)) { + } + if (strstart(filename, "/dev/fd", NULL) || + bs->type == BDRV_TYPE_FLOPPY) { s->type = FTYPE_FD; s->fd_open_flags = open_flags; /* open will not fail even if no floppy is inserted */ open_flags |= O_NONBLOCK; - } else if (strstart(filename, "/dev/sg", NULL)) { + } + if (s->type = FTYPE_FILE && + strstart(filename, "/dev/sg", NULL)) { bs->sg = 1; } #endif ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] don't exit if cdrom media fails to open 2009-06-09 22:22 ` Mark McLoughlin @ 2009-06-09 23:34 ` David Ahern 2009-06-10 13:47 ` Cole Robinson 0 siblings, 1 reply; 4+ messages in thread From: David Ahern @ 2009-06-09 23:34 UTC (permalink / raw) To: Mark McLoughlin; +Cc: qemu-devel, Cole Robinson Mark McLoughlin wrote: > Hi David, > > On Tue, 2009-06-09 at 07:41 -0600, David Ahern wrote: >> This patch allows a VM to continue even if the cdrom image is not >> accessible at VM boot time. It allows a boot progression similar to real >> hardware (e.g., try cd, then disk). >> >> For example, >> >> qemu-system-x86_64 -cdrom /dev/dvd -hda disk.img -boot dc >> >> If there is no media in the tray, qemu currently exits with the message: >> qemu: could not open disk image /dev/dvd >> >> With this patch, the message is still displayed, but qemu continues. It >> first tries to boot from the cdrom and then falls back to the disk. >> >> Signed-off-by: David Ahern <dsahern@gmail.com> >> >> --- >> >> diff --git a/vl.c b/vl.c >> index fcf8532..bd3709c 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -152,6 +152,7 @@ int main(int argc, char **argv) >> #include "qemu-char.h" >> #include "cache-utils.h" >> #include "block.h" >> +#include "block_int.h" >> #include "dma.h" >> #include "audio/audio.h" >> #include "migration.h" >> @@ -2551,7 +2552,8 @@ int drive_init(struct drive_opt *arg, int >> snapshot, void *opaque) >> if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { >> fprintf(stderr, "qemu: could not open disk image %s\n", >> file); >> - return -1; >> + if (bdrv->type != BDRV_TYPE_CDROM) >> + return -1; > > I think Cole's patch here: > > https://bugzilla.redhat.com/show_bug.cgi?id=473154#c15 > > fixes the same problem? Certainly, it seems to me that any code > requiring the path to be e.g. /dev/cd is doomed and should be fixed as > Cole suggests? Cole's patch works as well. I don't have a preference for how it gets done, just that I can start a guest without checking whether there is media in the tray and adjusting the qemu invocation. thanks, david > > Cheers, > Mark. > > (Patch below for convenience) > > --- new/qemu/block-raw-posix.c 2009-03-28 15:05:16.000000000 -0400 > +++ qemu-kvm-0.10/qemu/block-raw-posix.c 2009-04-06 18:57:50.000000000 -0400 > @@ -942,16 +942,21 @@ static int hdev_open(BlockDriverState *b > > s->type = FTYPE_FILE; > #if defined(__linux__) > - if (strstart(filename, "/dev/cd", NULL)) { > + if (strstart(filename, "/dev/cd", NULL) || > + bs->type == BDRV_TYPE_CDROM) { > /* open will not fail even if no CD is inserted */ > open_flags |= O_NONBLOCK; > s->type = FTYPE_CD; > - } else if (strstart(filename, "/dev/fd", NULL)) { > + } > + if (strstart(filename, "/dev/fd", NULL) || > + bs->type == BDRV_TYPE_FLOPPY) { > s->type = FTYPE_FD; > s->fd_open_flags = open_flags; > /* open will not fail even if no floppy is inserted */ > open_flags |= O_NONBLOCK; > - } else if (strstart(filename, "/dev/sg", NULL)) { > + } > + if (s->type = FTYPE_FILE && > + strstart(filename, "/dev/sg", NULL)) { > bs->sg = 1; > } > #endif > > > ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [Qemu-devel] [PATCH] don't exit if cdrom media fails to open 2009-06-09 23:34 ` David Ahern @ 2009-06-10 13:47 ` Cole Robinson 0 siblings, 0 replies; 4+ messages in thread From: Cole Robinson @ 2009-06-10 13:47 UTC (permalink / raw) To: David Ahern; +Cc: Mark McLoughlin, qemu-devel David Ahern wrote: > > Mark McLoughlin wrote: >> Hi David, >> >> On Tue, 2009-06-09 at 07:41 -0600, David Ahern wrote: >>> This patch allows a VM to continue even if the cdrom image is not >>> accessible at VM boot time. It allows a boot progression similar to real >>> hardware (e.g., try cd, then disk). >>> >>> For example, >>> >>> qemu-system-x86_64 -cdrom /dev/dvd -hda disk.img -boot dc >>> >>> If there is no media in the tray, qemu currently exits with the message: >>> qemu: could not open disk image /dev/dvd >>> >>> With this patch, the message is still displayed, but qemu continues. It >>> first tries to boot from the cdrom and then falls back to the disk. >>> >>> Signed-off-by: David Ahern <dsahern@gmail.com> >>> >>> --- >>> >>> diff --git a/vl.c b/vl.c >>> index fcf8532..bd3709c 100644 >>> --- a/vl.c >>> +++ b/vl.c >>> @@ -152,6 +152,7 @@ int main(int argc, char **argv) >>> #include "qemu-char.h" >>> #include "cache-utils.h" >>> #include "block.h" >>> +#include "block_int.h" >>> #include "dma.h" >>> #include "audio/audio.h" >>> #include "migration.h" >>> @@ -2551,7 +2552,8 @@ int drive_init(struct drive_opt *arg, int >>> snapshot, void *opaque) >>> if (bdrv_open2(bdrv, file, bdrv_flags, drv) < 0) { >>> fprintf(stderr, "qemu: could not open disk image %s\n", >>> file); >>> - return -1; >>> + if (bdrv->type != BDRV_TYPE_CDROM) >>> + return -1; >> I think Cole's patch here: >> >> https://bugzilla.redhat.com/show_bug.cgi?id=473154#c15 >> >> fixes the same problem? Certainly, it seems to me that any code >> requiring the path to be e.g. /dev/cd is doomed and should be fixed as >> Cole suggests? > > Cole's patch works as well. I don't have a preference for how it gets > done, just that I can start a guest without checking whether there is > media in the tray and adjusting the qemu invocation. > There is an extra benefit to my patch: /dev/dvd will be treated as a host cdrom device, so ejecting media in the guest will be mapped to a physical eject on the host. I'll touch up my patch and send with a Signed-off-by. Thanks, Cole ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-06-10 13:47 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-06-09 13:41 [Qemu-devel] [PATCH] don't exit if cdrom media fails to open David Ahern 2009-06-09 22:22 ` Mark McLoughlin 2009-06-09 23:34 ` David Ahern 2009-06-10 13:47 ` Cole Robinson
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).