diff options
author | Cole Robinson <crobinso@redhat.com> | 2009-06-16 17:46:45 -0300 |
---|---|---|
committer | Eduardo Habkost <ehabkost@redhat.com> | 2009-06-30 17:44:57 -0300 |
commit | 0749b0306e560c04a854ed19cc4d49d636c42fd4 (patch) | |
tree | 90db47165ccc9244503a270803cae304f6be0d35 | |
parent | 34716722bf33acd7adf01f9640456e73f4d30831 (diff) |
bz#505090: Guess host device type from requested guest device type
RHEL bug:
https://bugzilla.redhat.com/show_bug.cgi?id=505090
Clone of the following Fedora bug:
https://bugzilla.redhat.com/show_bug.cgi?id=473154
[ehabkost: comments from Cole Robinson on bugzilla are pasted below]
> I just went digging through the qemu code, and I think the fix should really be
> at that level.
>
> The code is already capable of being launched with an empty cdrom device
> attached to it. Unfortunately qemu only enables this mode for cdrom devices if
> the passed path starts with '/dev/cd': in the above case, we are using /dev/sr0
> :( Yay robustness.
>
> Patch basically says "If the user requests a cdrom/floppy device, and the
> passed path is a block or char device, assume the path is a host cdrom/floppy
> device." This would change some existing behavior: for example, a host block
> device that is passed to a qemu guest as a cdrom is now assumed to be a host
> cdrom, even when it isn't. My guess is this won't yield any real functional
> change, since the only differences between floppy/cdrom and everything else (in
> this case) is in the ejectable media commands.
>
> I haven't done much testing besides verifying that qemu no longer complains
> about accessing the empty /dev/sr0.
[ehabkost: patch was sent to qemu-devel at:
http://marc.info/?l=qemu-devel&m=124458617900905
However, the code on the upstream qemu tree is different now, and the patch
will need to be ported when submitted again.]
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Bugzilla: 505090
RH-Upstream-status: equivalent-patch-submitted(qemu-devel)
Message-Id: <1245185205-9600-1-git-send-email-ehabkost@redhat.com>
Acked-by: Dor Laor <dlaor@redhat.com>
Acked-by: Juan Quintela <quintela@redhat.com>
Acked-by: john cooper <john.cooper@redhat.com>
-rw-r--r-- | qemu/block-raw-posix.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/qemu/block-raw-posix.c b/qemu/block-raw-posix.c index 85c57b8d..ac2dab9e 100644 --- a/qemu/block-raw-posix.c +++ b/qemu/block-raw-posix.c @@ -944,16 +944,21 @@ static int hdev_open(BlockDriverState *bs, const char *filename, int flags) 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 |