qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Gonglei <arei.gonglei@huawei.com>
To: Weidong Huang <hwd@huawei.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	libvir-list@redhat.com,
	"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
	armbru@redhat.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] Close the BlockDriverState when guest eject the media
Date: Tue, 21 Oct 2014 14:10:58 +0800	[thread overview]
Message-ID: <5445F8F2.9080509@huawei.com> (raw)
In-Reply-To: <5445F4CF.9050307@huawei.com>

On 2014/10/21 13:53, Weidong Huang wrote:

> On 2014/10/20 19:39, Kevin Wolf wrote:
> 
>> Am 20.10.2014 um 13:27 hat Weidong Huang geschrieben:
>>> On 2014/10/20 17:41, Kevin Wolf wrote:
>>>
>>>> Am 18.10.2014 um 12:02 hat Weidong Huang geschrieben:
>>>>> Hi ALL:
>>>>>
>>>>> There are two ways to eject the cdrom tray. One is by the eject's qmp commmand(eject_device).
>>>>> The another one is by the guest(bdrv_eject). They have different results.
>>>>
>>>> Yes, they are different things.
>>>>
>>>> If a guest opens the tray (using bdrv_eject) and then closes it again,
>>>> with no user interaction in between, the virtual media must still be in
>>>> the drive and the guest must be able to access the same image again.
>>>> Calling bdrv_close() in this case would be a bug.
>>>>
>>>> The goal of the monitor command "eject" on the other hand is to remove
>>>> the medium so that the drive is empty. That a device with a closed tray
>>>> has to be opened for this is only secondary.
>>>
>>>
>>> Thanks for your reply.
>>>
>>> There is a problem.
>>>
>>> 1. Qemu receive the "eject" command.
>>> 2. Runs "eject_request_cb" when an eject request is issued from the monitor, the tray
>>> is closed, and the medium is locked. But the drive is not closed.
>>> 3. Guest agree with opening tray and qemu will call bdrv_eject to complete. The drive is
>>> still not close.
>>>
>>> So the result of the monitor command "eject" is not to remove the medium in this situation.
>>
>> Now I understand, thanks for explaining.
>>
>> But I think libvirt can actually work correctly with what qemu offers
>> today. qemu returns an error if the medium cannot be removed with the
>> 'eject' command and it only sends an eject request to the guest.
>>
>> With this error, libvirt can know that the DEVICE_TRAY_MOVED event
>> doesn't mean that the medium has removed, but that it needs to issue
>> another 'eject' command.
>>
>> If this isn't implemented correctly in libvirt today, this needs a
>> libvirt fix rather than a qemu one.
>>
> 
> 
> hi all!
> 
> How about fix it in libvirt?
> 

Cc'ing Eric for more attention.

Maybe He can give you some suggestion :)

Best regards,
-Gonglei

>>>>> eject_device: close the BlockDriverState(bdrv_close(bs))
>>>>> bdrv_eject: don't close the BlockDriverState,
>>>>>
>>>>> This is ambiguous. So libvirt can't handle some situations.
>>>>>
>>>>> libvirt send eject qmp command ---> qemu send eject request to guest --->
>>>>> guest respond to qemu ---> qemu emit tray_open event to libvirt --->
>>>>> libvirt will not send change qmp command if media source is null. So
>>>>> the media is not be replace to the null.
>>>>
>>>> What is the problem that libvirt has with the guest opening the tray? I
>>>> don't think libvirt should even care about that case.
>>>
>>>
>>> For example, using libvirt to change media by xml below(media source is null):
>>> <disk type='file' device='cdrom'>
>>>     <driver name='qemu'/>
>>>     <target dev='hdb' bus='ide'/>
>>> </disk>
>>>
>>> libivrt return ok. But media still is in the guest.
>>> This is confused.
>>
>> Kevin
>>
>> .
>>
> 
> 
> 
> 

  reply	other threads:[~2014-10-21  6:12 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-18 10:02 [Qemu-devel] Close the BlockDriverState when guest eject the media Weidong Huang
2014-10-20  9:41 ` Kevin Wolf
2014-10-20 11:27   ` Weidong Huang
2014-10-20 11:39     ` Kevin Wolf
2014-10-21  0:46       ` Weidong Huang
2014-10-21  5:53       ` Weidong Huang
2014-10-21  6:10         ` Gonglei [this message]
2014-10-24 18:32           ` Eric Blake
2014-10-27  8:21             ` Markus Armbruster
2014-10-20 12:12     ` Markus Armbruster
2014-10-21  5:06       ` Weidong Huang
2014-10-21  8:33         ` Markus Armbruster
2014-10-21  9:17           ` Gonglei

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=5445F8F2.9080509@huawei.com \
    --to=arei.gonglei@huawei.com \
    --cc=armbru@redhat.com \
    --cc=hwd@huawei.com \
    --cc=kwolf@redhat.com \
    --cc=libvir-list@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    /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 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).