From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MEAq9-0001MR-74 for qemu-devel@nongnu.org; Tue, 09 Jun 2009 19:34:49 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MEAq4-0001GD-EX for qemu-devel@nongnu.org; Tue, 09 Jun 2009 19:34:48 -0400 Received: from [199.232.76.173] (port=59248 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MEAq4-0001G2-BS for qemu-devel@nongnu.org; Tue, 09 Jun 2009 19:34:44 -0400 Received: from rv-out-0708.google.com ([209.85.198.244]:39061) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MEAq3-0005JB-Tn for qemu-devel@nongnu.org; Tue, 09 Jun 2009 19:34:44 -0400 Received: by rv-out-0708.google.com with SMTP id c5so157883rvf.22 for ; Tue, 09 Jun 2009 16:34:43 -0700 (PDT) Message-ID: <4A2EF18A.8080208@gmail.com> Date: Tue, 09 Jun 2009 17:34:34 -0600 From: David Ahern MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] don't exit if cdrom media fails to open References: <4A2E6698.30208@gmail.com> <1244586143.7164.25.camel@blaa> In-Reply-To: <1244586143.7164.25.camel@blaa> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Mark McLoughlin Cc: qemu-devel@nongnu.org, 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 >> >> --- >> >> 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 > > >