Hide Forgot
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:
Hi, Xiangming Is this a regressioin? Thanks.
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.
After downgradation test, found the version which import this issue. qemu-kvm-390: pass qemu-kvm-391: fail
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.
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
Fix included in qemu-kvm-0.12.1.2-2.425.el6
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.
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