Bug 1031883

Summary: qemu-io error prompt "Operation is supported" is not expected
Product: Red Hat Enterprise Linux 6 Reporter: xhan
Component: qemu-kvmAssignee: Jeff Cody <jcody>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: low Docs Contact:
Priority: medium    
Version: 6.5CC: bsarathy, chayang, jcody, juzhang, michen, mkenneth, qzhang, rbalakri, shu, virt-maint
Target Milestone: rcKeywords: Regression
Target Release: ---   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: qemu-kvm-0.12.1.2-2.425.el6 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-10-14 06:54:33 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description xhan 2013-11-19 04:39:52 UTC
Description of problem:

Trigger qemu-io error, the prompt "Operation is supported" is not expected.

Expected prompt is "Operation not permitted". 

Version-Release number of selected component (if applicable):
kernel-2.6.32-430.el6.x86_64
qemu-kvm-0.12.1.2-2.415.el6_5.2.x86_64


How reproducible:
100%

Steps to Reproduce:
1. create qcow2 image 
qemu-img create -f qcow2 -o cluster_size=512 blkdebug.qcow2 1G

2. create the cfg file 

cat blkdebug.cfg
[inject-error]
event = "refblock_update_part"
immediately = "off"
errno = "1"


3. open qemu-io session
qemu-io blkdebug:blkdebug.cfg:blkdebug.qcow2
4. trigger the error
write -b 0 1G
 
Actual results:
qemu-io> write -b 0 1G
write failed: Operation not supported


Expected results:
#define EPERM            1      /* Operation not permitted */



Additional info:

Comment 2 Qunfang Zhang 2013-11-19 08:59:56 UTC
Hi, Xiangming

Is this a regressioin?  Thanks.

Comment 3 xhan 2013-11-19 09:41:20 UTC
Have tested this issue on qemu-kvm-0.12.1.2-2.415.el6.x86_64. The issue exists on the version. 

So this is not regression imported on Z stream.

Comment 4 xhan 2013-11-19 09:57:54 UTC
After downgradation test, found the version which import this issue. 

qemu-kvm-390: pass
qemu-kvm-391: fail

Comment 11 Jeff Cody 2014-04-14 20:14:11 UTC
It turns out this issue is a bit more complex than just an incorrect error message.  This started to occur after commit f0d6b82:  'block: Produce zeros when protocols reading beyond end of file'.

In that commit, rather than always calling the driver bdrv_co_readv() method, the length is checked by a call to bdrv_getlength(), and the number of sectors computed.  If there are 0 sectors in the BDS file, the read is short circuited and the function returns success.

When using a blkdebug filter, the initial length as recorded in the BDS is 0 after bdrv_open().

bdrv_getlength() will call the driver .bdrv_getlength() method, however in the current codebase the blkdebug driver did not have a .bdrv_getlength() method.

The solution is to backport commit e130225587cb0d48b2c0b7c04b6bf9c95fe75ac9: 'blkdebug: pass getlength to underlying file', which implements .bdrv_getlength() by passing it along to its underlying file format.

Comment 12 Jeff Cody 2014-04-14 20:34:39 UTC
This will manifest itself also by incorrectly identifying the file as 'raw' rather than 'qcow2':

./qemu-img info  blkdebug:blkdebug.cfg:blkdebug.qcow2
image: blkdebug:blkdebug.cfg:blkdebug.qcow2
file format: raw
virtual size: 0 (0 bytes)
disk size: 260K

After the fix (backport of e130225):

./qemu-img info  blkdebug:blkdebug.cfg:blkdebug.qcow2
image: blkdebug:blkdebug.cfg:blkdebug.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 260K
cluster_size: 512

Comment 14 Miroslav Rezanina 2014-04-29 06:01:33 UTC
Fix included in qemu-kvm-0.12.1.2-2.425.el6

Comment 17 Shaolong Hu 2014-06-20 05:19:30 UTC
Verified on qemu-kvm-rhev-0.12.1.2-2.427.el6.x86_64:

with steps in comment 0, after step 4:

qemu-io> write -b 0 1G
write failed: Operation not permitted

Verified.

Comment 18 errata-xmlrpc 2014-10-14 06:54:33 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.

http://rhn.redhat.com/errata/RHBA-2014-1490.html