1. 02 7月, 2010 1 次提交
    • L
      Monitor: handle optional '-' arg as a bool · eb159d13
      Luiz Capitulino 提交于
      Historically, user monitor arguments beginning with '-' (eg. '-f')
      were passed as integers down to handlers.
      
      I've maintained this behavior in the new monitor because we didn't
      have a boolean type at the very beginning of QMP. Today we have it
      and this behavior is causing trouble to QMP's argument checker.
      
      This commit fixes the problem by doing the following changes:
      
      1. User Monitor
      
         Before: the optional arg was represented as a QInt, we'd pass 1
                 down to handlers if the user specified the argument or
                 0 otherwise
      
         This commit: the optional arg is represented as a QBool, we pass
                      true down to handlers if the user specified the
                      argument, otherwise _nothing_ is passed
      
      2. QMP
      
         Before: the client was required to pass the arg as QBool, but we'd
                 convert it to QInt internally. If the argument wasn't passed,
                 we'd pass 0 down
      
         This commit: still require a QBool, but doesn't do any conversion and
                      doesn't pass any default value
      
      3. Convert existing handlers (do_eject()/do_migrate()) to the new way
      
         Before: Both handlers would expect a QInt value, either 0 or 1
      
         This commit: Change the handlers to accept a QBool, they handle the
                      following cases:
      
                         A) true is passed: the option is enabled
                         B) false is passed: the option is disabled
                         C) nothing is passed: option not specified, use
                                               default behavior
      Signed-off-by: NLuiz Capitulino <lcapitulino@redhat.com>
      eb159d13
  2. 22 6月, 2010 1 次提交
    • E
      monitor: allow device to be ejected if no disk is inserted · 3b5276b5
      Eduardo Habkost 提交于
      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.
      
      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 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.
      Signed-off-by: NEduardo Habkost <ehabkost@redhat.com>
      Signed-off-by: NKevin Wolf <kwolf@redhat.com>
      3b5276b5
  3. 15 6月, 2010 5 次提交
  4. 04 6月, 2010 2 次提交