Skip to content
Snippets Groups Projects
  1. May 31, 2017
  2. May 29, 2017
    • Hanna Reitz's avatar
      block/file-*: *_parse_filename() and colons · 03c320d8
      Hanna Reitz authored
      
      The file drivers' *_parse_filename() implementations just strip the
      optional protocol prefix off the filename. However, for e.g.
      "file:foo:bar", this would lead to "foo:bar" being stored as the BDS's
      filename which looks like it should be managed using the "foo" protocol.
      This is especially troublesome if you then try to resolve a backing
      filename based on "foo:bar".
      
      This issue can only occur if the stripped part is a relative filename
      ("file:/foo:bar" will be shortened to "/foo:bar" and having a slash
      before the first colon means that "/foo" is not recognized as a protocol
      part). Therefore, we can easily fix it by prepending "./" to such
      filenames.
      
      Before this patch:
      $ ./qemu-img create -f qcow2 backing.qcow2 64M
      Formatting 'backing.qcow2', fmt=qcow2 size=67108864 encryption=off
          cluster_size=65536 lazy_refcounts=off refcount_bits=16
      $ ./qemu-img create -f qcow2 -b backing.qcow2 file:top:image.qcow2
      Formatting 'file:top:image.qcow2', fmt=qcow2 size=67108864
          backing_file=backing.qcow2 encryption=off cluster_size=65536
          lazy_refcounts=off refcount_bits=16
      $ ./qemu-io file:top:image.qcow2
      can't open device file:top:image.qcow2: Could not open backing file:
          Unknown protocol 'top'
      
      After this patch:
      $ ./qemu-io file:top:image.qcow2
      [no error]
      
      Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
      Message-id: 20170522195217.12991-3-mreitz@redhat.com
      Reviewed-by: default avatarEric Blake <eblake@redhat.com>
      Signed-off-by: default avatarMax Reitz <mreitz@redhat.com>
      03c320d8
  3. May 25, 2017
  4. May 24, 2017
  5. May 23, 2017
    • Eric Blake's avatar
      shutdown: Expose bool cause in SHUTDOWN and RESET events · 08fba7ac
      Eric Blake authored
      Libvirt would like to be able to distinguish between a SHUTDOWN
      event triggered solely by guest request and one triggered by a
      SIGTERM or other action on the host.  While qemu_kill_report() was
      already able to give different output to stderr based on whether a
      shutdown was triggered by a host signal (but NOT by a host UI event,
      such as clicking the X on the window), that information was then
      lost to management.  The previous patches improved things to use an
      enum throughout all callsites, so now we have something ready to
      expose through QMP.
      
      Note that for now, the decision was to expose ONLY a boolean,
      rather than promoting ShutdownCause to a QAPI enum; this is because
      libvirt has not expressed an interest in anything finer-grained.
      We can still add additional details, in a backwards-compatible
      manner, if a need later arises (if the addition happens before 2.10,
      we can replace the bool with an enum; otherwise, the enum will have
      to be in addition to the bool); this patch merely adds a helper
      shutdown_caused_by_guest() to map the internal enum into the
      external boolean.
      
      Update expected iotest outputs to match the new data (complete
      coverage of the affected tests is obtained by -raw, -qcow2, and -nbd).
      
      Here is output from 'virsh qemu-monitor-event --loop' with the
      patch installed:
      
      event SHUTDOWN at 1492639680.731251 for domain fedora_13: {"guest":true}
      event STOP at 1492639680.732116 for domain fedora_13: <null>
      event SHUTDOWN at 1492639680.732830 for domain fedora_13: {"guest":false}
      
      Note that libvirt runs qemu with -no-shutdown: the first SHUTDOWN event
      was triggered by an action I took directly in the guest (shutdown -h),
      at which point qemu stops the vcpus and waits for libvirt to do any
      final cleanups; the second SHUTDOWN event is the result of libvirt
      sending SIGTERM now that it has completed cleanup.  Libvirt is already
      smart enough to only feed the first qemu SHUTDOWN event to the end user
      (remember, virsh qemu-monitor-event is a low-level debugging interface
      that is explicitly unsupported by libvirt, so it sees things that normal
      end users do not); changing qemu to emit SHUTDOWN only once is outside
      the scope of this series.
      
      See also https://bugzilla.redhat.com/1384007
      
      
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20170515214114.15442-6-eblake@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      08fba7ac
    • Eric Blake's avatar
      shutdown: Add source information to SHUTDOWN and RESET · cf83f140
      Eric Blake authored
      
      Time to wire up all the call sites that request a shutdown or
      reset to use the enum added in the previous patch.
      
      It would have been less churn to keep the common case with no
      arguments as meaning guest-triggered, and only modified the
      host-triggered code paths, via a wrapper function, but then we'd
      still have to audit that I didn't miss any host-triggered spots;
      changing the signature forces us to double-check that I correctly
      categorized all callers.
      
      Since command line options can change whether a guest reset request
      causes an actual reset vs. a shutdown, it's easy to also add the
      information to reset requests.
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Acked-by: David Gibson <david@gibson.dropbear.id.au> [ppc parts]
      Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> [SPARC part]
      Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> [s390x parts]
      Message-Id: <20170515214114.15442-5-eblake@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      cf83f140
    • Eric Blake's avatar
      shutdown: Preserve shutdown cause through replay · 802f045a
      Eric Blake authored
      
      With the recent addition of ShutdownCause, we want to be able to pass
      a cause through any shutdown request, and then faithfully replay that
      cause when later replaying the same sequence.  The easiest way is to
      expand the reply event mechanism to track a series of values for
      EVENT_SHUTDOWN, one corresponding to each value of ShutdownCause.
      
      We are free to change the replay stream as needed, since there are
      already no guarantees about being able to use a replay stream by
      any other version of qemu than the one that generated it.
      
      The cause is not actually fed back until the next patch changes the
      signature for requesting a shutdown; a TODO marks that upcoming change.
      
      Yes, this uses the gcc/clang extension of a ranged case label,
      but this is not the first time we've used non-C99 constructs.
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Reviewed-by: default avatarPavel Dovgalyuk <pavel.dovgaluk@ispras.ru>
      Message-Id: <20170515214114.15442-4-eblake@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      802f045a
    • Eric Blake's avatar
      shutdown: Prepare for use of an enum in reset/shutdown_request · aedbe192
      Eric Blake authored
      
      We want to track why a guest was shutdown; in particular, being able
      to tell the difference between a guest request (such as ACPI request)
      and host request (such as SIGINT) will prove useful to libvirt.
      Since all requests eventually end up changing shutdown_requested in
      vl.c, the logical change is to make that value track the reason,
      rather than its current 0/1 contents.
      
      Since command-line options control whether a reset request is turned
      into a shutdown request instead, the same treatment is given to
      reset_requested.
      
      This patch adds an internal enum ShutdownCause that describes reasons
      that a shutdown can be requested, and changes qemu_system_reset() to
      pass the reason through, although for now nothing is actually changed
      with regards to what gets reported.  The enum could be exported via
      QAPI at a later date, if deemed necessary, but for now, there has not
      been a request to expose that much detail to end clients.
      
      For the most part, we turn 0 into SHUTDOWN_CAUSE_NONE, and 1 into
      SHUTDOWN_CAUSE_HOST_ERROR; the only specific case where we have enough
      information right now to use a different value is when we are reacting
      to a host signal.  It will take a further patch to edit all call-sites
      that can trigger a reset or shutdown request to properly pass in any
      other reasons; this patch includes TODOs to point such places out.
      
      qemu_system_reset() trades its 'bool report' parameter for a
      'ShutdownCause reason', with all non-zero values having the same
      effect; this lets us get rid of the weird #defines for VMRESET_*
      as synonyms for bools.
      
      Signed-off-by: default avatarEric Blake <eblake@redhat.com>
      Message-Id: <20170515214114.15442-3-eblake@redhat.com>
      Reviewed-by: default avatarMarkus Armbruster <armbru@redhat.com>
      Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
      aedbe192
  6. May 19, 2017
  7. May 18, 2017
Loading