Bug 1270709

Summary: Volume's allocation should be updated automatically while doing virsh vol-wipe
Product: Red Hat Enterprise Linux 7 Reporter: yafu <yafu>
Component: libvirtAssignee: John Ferlan <jferlan>
Status: CLOSED ERRATA QA Contact: Virtualization Bugs <virt-bugs>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 7.2CC: dyuan, jdenemar, jferlan, rbalakri, yanyang, yisun, zpeng
Target Milestone: rc   
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: libvirt-1.3.1-1.el7 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2016-11-03 18:25:53 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 yafu 2015-10-12 08:43:15 UTC
Description of problem:
 Volume's allocation should be updated automatically while doing virsh vol-wipe

Version-Release number of selected component (if applicable):
 kernel-3.10.0-322.x86_64.rpm
 qemu-kvm-rhev-2.3.0-29.el7.x86_64
 libvirt-daemon-1.2.17-13.el7.x86_64

How reproducible:
100%

Steps to Reproduce:
1. Create a vol,which format is raw:
   #virsh vol-create-as --pool default --capacity 200M --allocation 100M --format raw test.img
2. Make sure the vol info is correct:
    #virsh vol-info --pool default test.img
    Name:           test.img
    Type:           file
    Capacity:       200.00 MiB
    Allocation:     100.00 MiB
3. wipe the vol:
   #virsh vol-wipe --pool default test.img
4. Check the size of file test.img
   #du -h /var/lib/libvirt/images/test.img
    0        /var/lib/libvirt/images/test.img
5. resize the vol:
   #virsh vol-resize --pool default test.img --shrink 50M
   error: Failed to change size of volume 'test.img' to 50M

   error: invalid argument: can't shrink capacity below existing allocation

Actual results:
After step 5, 'virsh vol-resize --shrink' failed with error message:
" error: Failed to change size of volume 'test.img' to 50M

  error: invalid argument: can't shrink capacity below existing allocation"

The error shows the volume's allocation is not updated automatically while doing 'virsh vol-wipe'.

Expected results:
After step5, 'virsh vol-resize --shrink' should be executed correctly.

Additional info:
Excute 'virsh vol-info --pool default test.img' before step 5,'virsh vol-resize --shrink' will be executed correctly.

Comment 2 John Ferlan 2015-12-02 20:25:41 UTC
Running a 'virsh vol-info' or 'virsh vol-list default --details' after the 'virsh vol-wipe' would 'reset' the internal view of the volume allocation.

In any case, I've generated a patch upstream in order to refresh the volume (if there is a refreshVol backend API) after the wipe volume is successful. See:

http://www.redhat.com/archives/libvir-list/2015-December/msg00085.html

Comment 3 John Ferlan 2015-12-17 12:39:48 UTC
Initial patch review resulted in generation of a v2:

http://www.redhat.com/archives/libvir-list/2015-December/msg00608.html

which included some doc adjustments. After a bit of back and forth - the doc adjustments were removed.

Patch has been pushed:

$ git describe 80ca86e54d101508ba6f3c5affc420d946810331
CVE-2015-5313-36-g80ca86e
$

Comment 5 yisun 2016-02-24 04:45:44 UTC
version:libvirt-1.3.1-1.el7.x86_64

Verified and PASSED.

steps:
1. # virsh vol-create-as --pool default --capacity 200M --allocation 100M --format raw test.img
Vol test.img created

2. # virsh vol-info test.img default 
Name:           test.img
Type:           file
Capacity:       200.00 MiB
Allocation:     100.00 MiB

3. # virsh vol-resize --pool default test.img --shrink 50M
error: Failed to change size of volume 'test.img' to 50M

error: invalid argument: can't shrink capacity below existing allocation

4. # virsh vol-wipe --pool default test.img
Vol test.img wiped

5. # virsh vol-resize --pool default test.img --shrink 50M
Size of volume 'test.img' successfully changed to 50M

6. # qemu-img info /var/lib/libvirt/images/test.img 
image: /var/lib/libvirt/images/test.img
file format: raw
virtual size: 50M (52428800 bytes)
disk size: 0

7. # virsh vol-info test.img default 
Name:           test.img
Type:           file
Capacity:       50.00 MiB
Allocation:     0.00 B

Comment 7 errata-xmlrpc 2016-11-03 18:25:53 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-2577.html