Hide Forgot
Description of problem: After one of snapshot chain images rewrite, can not use snapshot_blkdev to create new snapshot. When rewrite one of snapshot chain images, qmp does not give any hint. Version-Release number of selected component (if applicable): qemu-kvm-rhev-1.5.3-19.el7.x86_64 How reproducible: 100% Steps to Reproduce: 1.Boot guest. <cli>: # /usr/libexec/qemu-kvm -M pc-i440fx-rhel7.0.0 -cpu SandyBridge -enable-kvm -m 4G -smp 4,sockets=2,cores=2,threads=1 -name juli -uuid 355a2475-4e03-4cdd-bf7b-5d6a59edaa68 -rtc base=localtime,clock=host,driftfix=slew \ -device virtio-scsi-pci,bus=pci.0,addr=0x5,id=scsi0 -drive file=iscsi://10.66.6.82:3260/iqn.2013-11.com.example:storage.disk1.juli.xyz/1,if=none,id=drive-scsi0-0-0,media=disk,cache=none,format=qcow2,werror=stop,rerror=stop,aio=native -device scsi-hd,drive=drive-scsi0-0-0,bus=scsi0.0,scsi-id=0,lun=0,id=juli,bootindex=2 \ -drive file=/home/ISO/en_windows_8.1_preview_x86_dvd_2358833.iso,if=none,media=cdrom,format=raw,aio=native,id=drive-ide1-0-0 -device ide-drive,drive=drive-ide1-0-0,id=ide1-0-0,bus=ide.0,unit=0,bootindex=4 -device virtio-balloon-pci,id=ballooning -global PIIX4_PM.disable_s3=0 -global PIIX4_PM.disable_s4=0 -net none -k en-us -boot menu=on,reboot-timeout=-1,strict=on -qmp tcp:0:4477,server,nowait -serial unix:/tmp/ttyS0,server,nowait -vnc :3 -spice port=5939,disable-ticketing -vga qxl -global qxl-vga.revision=3 -monitor stdio -monitor tcp:0:7777,server,nowait -monitor unix:/tmp/monitor1,server,nowait \ -netdev tap,id=tap1,vhost=on,queues=4,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown,ifname=tap-juli \ -device virtio-net-pci,netdev=tap1,id=nic1,mq=on,vectors=17,mac=1a:59:0a:4b:aa:94 2.save live snapshot snapshot-n (n=1,2,3) via qmp. $ telnet 10.66.106.4 4477 {"execute":"qmp_capabilities"} {"return": {}} { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-1.img", "format": "qcow2" } } {"return": {}} { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-2.img", "format": "qcow2" } } {"return": {}} { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-3.img", "format": "qcow2" } } {"return": {}} 3.save live snapshot snapshot-1 after step 2. { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-1.img", "format": "qcow2" } } {"return": {}} 4.save live snapshot snapshot-4 via qmp. { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-4.img", "format": "qcow2" } } Actual results: { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-4.img", "format": "qcow2" } } {"error": {"class": "GenericError", "desc": "Could not open '/home/snapshot-1.img': Could not open file: Too many open files: Too many open files"}} Expected results: When rewrite one of snapshot chain images, qmp give an error message or forbid this behaviour. Additional info: After step 2, do the following live snapshot: { "execute": "blockdev-snapshot-sync", "arguments": { "device": "drive-scsi0-0-0", "snapshot-file": "/home/snapshot-3.img", "format": "qcow2" } } {"error": {"class": "GenericError", "desc": "Error: Trying to create an image with the same filename as the backing file"}} As the above shows, qmp will give an error message.
Xu Wang's upstream series, "Refine and export backing file loop check" fixes this issue. The series has spent some time on the upstream list, and is now at v9: http://lists.gnu.org/archive/html/qemu-devel/2013-11/msg03245.html