Bug 1038522 - qemu/qmp should report error and stop during block_stream to a non-enough-space block
Summary: qemu/qmp should report error and stop during block_stream to a non-enough-spa...
Keywords:
Status: CLOSED NOTABUG
Alias: None
Product: Red Hat Enterprise Linux 7
Classification: Red Hat
Component: qemu-kvm-rhev
Version: 7.0
Hardware: Unspecified
OS: Unspecified
medium
medium
Target Milestone: rc
: ---
Assignee: Jeff Cody
QA Contact: Virtualization Bugs
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-12-05 09:29 UTC by Qian Guo
Modified: 2016-03-28 02:29 UTC (History)
8 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Clone Of:
Environment:
Last Closed: 2014-07-29 19:19:52 UTC
Target Upstream Version:


Attachments (Terms of Use)

Description Qian Guo 2013-12-05 09:29:25 UTC
Description of problem:

When test libiscsi backend virtual block, boot guest with a 5G real size data block and have more than 1G real data inside, then create a snapshot of it to a 1G real size libiscsi block, if block streaming to this snapshot, qemu/qmp can not report any error, and can finish successfully.

Version-Release number of selected component (if applicable):
# uname -r
3.10.0-57.el7.x86_64
]# rpm -q qemu-kvm-rhev
qemu-kvm-rhev-1.5.3-20.el7.x86_64

How reproducible:
100%

Steps to Reproduce:
1.Prepare 2  iscsi luns, one is 5G size block and another is 1G size.
5Gfile:  10.66.71.180:3260,1 iqn.10.66.71.180.target4
1Gfile:  10.66.71.180:3260,1 iqn.10.66.71.180.target8

2.Boot rhel7 guest with the 5G size data disk:
# /usr/libexec/qemu-kvm -M pc -cpu Penryn,-kvm_pv_eoi -enable-kvm -m 4096 -smp 4,socket=1,cores=4,threads=1 -name rhel7 -nodefaults -nodefconfig -drive file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target1/1,if=none,id=drive-virtio-disk0,format=qcow2,werror=stop,rerror=stop,aio=native -device virtio-blk-pci,id=virtio-disk0,drive=drive-virtio-disk0 -global PIIX4_PM.disable_s3=0 -global PIIX4_PM.disable_s4=0 -vnc :10 -vga qxl -global qxl-vga.vram_size=67108864 -monitor stdio -boot menu=on -netdev tap,id=netdev0,vhost=on,fd=7 -device virtio-net-pci,mac=46:c5:83:01:5f:4c,netdev=netdev0,id=net0 -device virtio-balloon-pci,id=b1 7<>/dev/tap7 -drive file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target4/1,if=none,id=drive-virtio-disk1,format=qcow2,werror=stop,rerror=stop,aio=native -device virtio-blk-pci,id=virtio-disk1,drive=drive-virtio-disk1  -qmp tcp:0:1111,server,nowait

3.Inside guest, in the data disk, create a 3G size file:
# ll -h
total 3.0G
-rw-r--r--. 1 root root 3.0G Dec  5 17:06 3Gfile
# md5sum  3Gfile 
4322d422199eaccfbd36feb3da955b16  3Gfile

4.Create snapshot to the 1G size iscsi lun
(qemu) snapshot_blkdev drive-virtio-disk1 iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
Formatting 'iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1', fmt=qcow2 size=5368709120 backing_file='iscsi://10.66.71.180:3260/iqn.10.66.71.180.target4/1' backing_fmt='qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 

(qemu) info block
drive-virtio-disk0: removable=0 io-status=ok file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target1/1 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-virtio-disk1: removable=0 io-status=ok file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1 backing_file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target4/1 backing_file_depth=1 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0

# qemu-img info iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
image: iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: unavailable
cluster_size: 65536
backing file: iscsi://10.66.71.180:3260/iqn.10.66.71.180.target4/1
backing file format: qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false

5.Block stream this device
(qemu) snapshot_blkdev drive-virtio-disk1 iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1


Actual results:
1.Block streaming can be finished successfully:
(qemu) info block
drive-virtio-disk0: removable=0 io-status=ok file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target1/1 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0
drive-virtio-disk1: removable=0 io-status=ok file=iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1 ro=0 drv=qcow2 encrypted=0 bps=0 bps_rd=0 bps_wr=0 iops=0 iops_rd=0 iops_wr=0

# qemu-img info iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
image: iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
file format: qcow2
virtual size: 5.0G (5368709120 bytes)
disk size: unavailable
cluster_size: 65536
Format specific information:
    compat: 1.1
    lazy refcounts: false

2.Boot guest agian with iscsi://10.66.71.180:3260/iqn.10.66.71.180.target8/1
The file is still existing, and md5sum value is same as above:
# md5sum 3Gfile 
4322d422199eaccfbd36feb3da955b16  3Gfile

3.But this physical block is only 1G size, this should be not right, I tried delete this file, and re-dd a more than 1G file, qemu/qmp report input/ouput io error, and guest access paused (this is the expected result).
Expected results:
Should not block stream successfully.
Additional info:

Comment 3 Jeff Cody 2014-07-22 20:10:46 UTC
Most likely, the test 3G file was created with (mostly/all) zeros, and so the sectors were allocated in the qcow2 file as zero clusters.  Especially since the md5sum matched the guest file, this doesn't appear to be an issue.

Comment 4 Jeff Cody 2014-07-29 19:19:52 UTC
Meant to close this as NOTABUG, rather than moving to MODIFIED.


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