All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kevin Wolf <kwolf@redhat.com>
To: qemu-devel@nongnu.org
Cc: Markus Armbruster <armbru@redhat.com>,
	Eduardo Habkost <ehabkost@redhat.com>,
	Luiz Capitulino <lcapitulino@redhat.com>
Subject: Re: [Qemu-devel] [PATCH] monitor: allow device to be ejected if no disk	is inserted
Date: Mon, 07 Jun 2010 13:18:12 +0200	[thread overview]
Message-ID: <4C0CD574.2020404@redhat.com> (raw)
In-Reply-To: <20100601221219.GB13961@blackpad.lan.raisama.net>

Am 02.06.2010 00:12, schrieb Eduardo Habkost:
> Resubmitting a patch that was submitted in December[1]. It was on the staging
> tree but somehow it got dropped. I have rebased it to current master branch on
> git.
> 
>   [1] http://article.gmane.org/gmane.comp.emulators.qemu/59813
> 
> --------
> 
> This changes the monitor eject_device() function to not check for
> bdrv_is_inserted().
> 
> Example run where the bug manifests itself:
> 
> (output of 'info block' is stripped to include only the CD-ROM device)
> 
>   (qemu) info block
>   ide1-cd0: type=cdrom removable=1 locked=0 [not inserted]
>   (qemu) change ide1-cd0 /dev/cdrom host_cdrom
>   (qemu) info block
>   ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
>   (qemu) eject ide1-cd0
>   (qemu) info block
>   ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
> 
>   # at this point, a disk was inserted on the host CD-ROM drive
> 
>   (qemu) info block
>   ide1-cd0: type=cdrom removable=1 locked=0 file=/dev/cdrom ro=1 drv=host_cdrom encrypted=0
>   (qemu) eject ide1-cd0
>   (qemu) info block
>   ide1-cd0: type=cdrom removable=1 locked=0 [not inserted]
>   (qemu)
> 
> The first eject command didn't work because the is_inserted() check
> failed.

But does it really make a difference? The guest should not see a medium
before and it should not see one afterwards.

> I have no clue why the code had the is_inserted() check, as it doesn't matter
> if there is a disk present at the host drive, when the user wants the virtual
> device to be disconnected from the host device.

The question is what the semantics of the eject monitor command is
supposed to be. I for one would have expected that it means that if
there was a medium inserted in the virtual CD-ROM drive, it won't be
there afterwards. I wouldn't have expected the connection to the host
device to be affected.

Actually, what I would have expected is not calling bdrv_close(), but
calling bdrv_eject() and possibly doing something with the device state
to reflect that. If the VM gets a real CD-ROM passed through, eject for
the virtual device should just mean eject for the real device.

> The is_inserted() check has another side effect: a memory leak if the "change"
> command is used multiple times, as do_change() calls eject_device() before
> re-opening the block device, but bdrv_close() is never called.

In the context of do_change the desired semantics is probably a
different one, I agree. It probably shouldn't call do_eject.

Kevin

  parent reply	other threads:[~2010-06-07 11:18 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-01 22:12 [Qemu-devel] [PATCH] monitor: allow device to be ejected if no disk is inserted Eduardo Habkost
2010-06-04 18:01 ` Luiz Capitulino
2010-06-07  6:57   ` Markus Armbruster
2010-06-07 11:18 ` Kevin Wolf [this message]
2010-06-07 12:19   ` Markus Armbruster
2010-06-07 12:43     ` Eduardo Habkost
2010-06-07 12:53       ` Kevin Wolf
2010-06-07 13:18         ` Markus Armbruster

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C0CD574.2020404@redhat.com \
    --to=kwolf@redhat.com \
    --cc=armbru@redhat.com \
    --cc=ehabkost@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.