Bug 1156635 - Libvirt is confused that qemu-kvm exposes 'block-job-cancel' but not 'block-stream'
Summary: Libvirt is confused that qemu-kvm exposes 'block-job-cancel' but not 'block-s...
Keywords:
Status: CLOSED ERRATA
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: qemu-kvm
Version: 7.0
Hardware: Unspecified
OS: Unspecified
low
medium
Target Milestone: rc
: ---
Assignee: Jeff Cody
QA Contact: Qianqian Zhu
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2014-10-24 20:59 UTC by Eric Blake
Modified: 2016-11-03 19:59 UTC (History)
14 users (show)

Fixed In Version: qemu-kvm-1.5.3-112.el7
Doc Type: Bug Fix
Doc Text:
Clone Of: 1140981
Environment:
Last Closed: 2016-11-03 19:59:36 UTC
Target Upstream Version:


Attachments (Terms of Use)


Links
System ID Priority Status Summary Last Updated
Red Hat Product Errata RHSA-2016:2585 normal SHIPPED_LIVE Moderate: qemu-kvm security, bug fix, and enhancement update 2016-11-03 12:09:03 UTC

Description Eric Blake 2014-10-24 20:59:20 UTC
cloning to qemu-kvm; maybe we should improve the crippling code to also nuke block-job-cancel (and maybe block-job-set-speed and query-block-jobs); it
seems weird to see commands related to block jobs if you can't start any.

+++ This bug was initially created as a clone of Bug #1140981 +++

Description of problem:

Libvirt should post more accurate error when do blockpull with qemu-kvm

Version-Release number of selected component (if applicable):

libvirt-1.2.8-2.el7.x86_64
qemu-kvm-1.5.3-69.el7.x86_64

How reproducible:

100%

Steps to Reproduce:
1. Prepare a backing chains

# qemu-img create -f qcow2 /var/lib/libvirt/images/base.img 10G ;qemu-img create -f qcow2 /var/lib/libvirt/images/base.s1 10G -b /var/lib/libvirt/images/base.img -o backing_fmt=qcow2;qemu-img create -f qcow2 /var/lib/libvirt/images/base.s2 10G -b /var/lib/libvirt/images/base.s1 -o backing_fmt=qcow2


Formatting '/var/lib/libvirt/images/base.img', fmt=qcow2 size=10737418240 encryption=off cluster_size=65536 lazy_refcounts=off
Formatting '/var/lib/libvirt/images/base.s1', fmt=qcow2 size=10737418240 backing_file='/var/lib/libvirt/images/base.img' backing_fmt='qcow2' encryption=off cluster_size=65536 lazy_refcounts=off
Formatting '/var/lib/libvirt/images/base.s2', fmt=qcow2 size=10737418240 backing_file='/var/lib/libvirt/images/base.s1' backing_fmt='qcow2' encryption=off cluster_size=65536 lazy_refcounts=off

 2. Install guest with base.s2 as source file

# virsh list && virsh domblklist rhel7
 Id    Name                           State
----------------------------------------------------
 52    rhel7                          running

Target     Source
------------------------------------------------
vda        /var/lib/libvirt/images/base.s2

3. Try to do blockpull

# virsh blockpull rhel7 vda --active

error: Requested operation is not valid: Command 'block-stream' is not found

#virsh blockpull rhel7 vda --base /var/lib/libvirt/images/base.s1

error: Requested operation is not valid: Command 'block-stream' is not found


Actual results:


Expected results:

Since block-stream is not supported on qemu-kvm, so libvirt should post more accurate
error like "error: unsupported configuration: block pull is not supported with this QEMU binary"

Additional info:

#virsh blockcopy rhel6 vda /var/lib/libvirt/images/copy.img --wait
error: unsupported configuration: block copy is not supported with this QEMU binary

#virsh blockcommit rhel6 vda --active
error: unsupported configuration: online commit not supported with this QEMU binary

--- Additional comment from Eric Blake on 2014-10-24 14:40:13 MDT ---

Uggh.  The problem is because RHEL ships 'block-job-cancel' even though it cripples out 'block-stream', but the libvirt code was assuming that either both commands are present, or neither.  I'm half tempted to reassign this to qemu to have them rework the crippling code to hide 'block-job-cancel', then libvirt will just work.

--- Additional comment from Eric Blake on 2014-10-24 14:56:44 MDT ---

Libvirt upstream patch proposed:
https://www.redhat.com/archives/libvir-list/2014-October/msg00784.html

Comment 4 Miroslav Rezanina 2016-05-16 08:06:08 UTC
Fix included in qemu-kvm-1.5.3-112.el7

Comment 6 Qianqian Zhu 2016-09-12 07:11:08 UTC
Reproduced with:
qemu-kvm-1.5.3-60.el7.x86_64

1. Prepare a backing chains

# qemu-img create -f qcow2 /var/lib/libvirt/images/base.img 10G ;qemu-img create -f qcow2 /var/lib/libvirt/images/base.s1 10G -b /var/lib/libvirt/images/base.img -o backing_fmt=qcow2;qemu-img create -f qcow2 /var/lib/libvirt/images/base.s2 10G -b /var/lib/libvirt/images/base.s1 -o backing_fmt=qcow2

 2. Install guest with base.s2 as source file

# virsh list && virsh domblklist rhel7

 Id    Name                           State
----------------------------------------------------
 3     rhel7                          running

Target     Source
------------------------------------------------
hda        /var/lib/libvirt/images/base.s2

3. Try to do blockpull

Result:
# virsh blockpull rhel7 hda
error: Requested operation is not valid: Command 'block-stream' is not found

# virsh blockpull rhel7 hda --base /var/lib/libvirt/images/base.s1
error: Requested operation is not valid: Command 'block-stream' is not found

Verified with:
qemu-kvm-1.5.3-122.el7.x86_64

Steps same as above.

Result:
# virsh blockpull rhel7 hda
error: unsupported configuration: block jobs not supported with this QEMU binary

# virsh blockpull rhel7 hda --base /var/lib/libvirt/images/base.s1
error: unsupported configuration: block jobs not supported with this QEMU binary

Moving to Verified.

Comment 8 errata-xmlrpc 2016-11-03 19:59:36 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory, and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://rhn.redhat.com/errata/RHSA-2016-2585.html


Note You need to log in before you can comment on or make changes to this bug.