Public bug reported:

Release:         Ubuntu 11.10 (Oneiric)
libvirt-bin:      0.9.2-4ubuntu15.1
qemu-kvm:   0.14.1+noroms-0ubuntu6

Summary:    With a running KVM virt,   performing an 'attach-disk',  then a 
'detach-disk', then another 'attach-disk' 
in an attempt to reattach the volume at the same point on the virt, fails, with 
the qemu reporting back to
libvirt a 'Duplicate ID' error.

Expected behavior:   The 2nd invocation of 'attach-disk' should have succeeded
Actual behavior:         Duplicate ID error reported


I believe this is most likely a qemu-kvm issue, as the DOM  kvm spits back at 
libvirt after the 'detach-disk'
does not show the just-detached disk.   There is some kind of registry/lookup 
for devices in qemu-kvm
and for whatever reason, the entry for the disk does not get removed when it is 
detached from the
virt.   Specifically, the error gets reported at the 2nd attach-disk attempt 
from:
  
  qemu-option.c:qemu_opts_create:697

684 QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int 
fail_if_exists)                                                  
685 {                                                                           
                                                        
686     QemuOpts *opts = NULL;                                                  
                                                        
687                                                                             
                                                        
688     if (id) {                                                               
                                                        
689         if (!id_wellformed(id)) {                                           
                                                        
690             qerror_report(QERR_INVALID_PARAMETER_VALUE, "id", "an 
identifier");                                                     
691             error_printf_unless_qmp("Identifiers consist of letters, 
digits, '-', '.', '_', starting with a letter.\n");            
692             return NULL;                                                    
                                                        
693         }                                                                   
                                                        
694         opts = qemu_opts_find(list, id);                                    
                                                        
695         if (opts != NULL) {                                                 
                                                        
696             if (fail_if_exists) {                                           
                                                        
697                 qerror_report(QERR_DUPLICATE_ID, id, list->name);           
<<<< ====== HERE ===========                                                    
      
698                 return NULL;                                                
                                                        
699             } else {                                                        
                                                        
700                 return opts;                                                
                                                        
701             }                                                               
                                                        
702         }                                                                   
                                                        
703     }                                                                       
                                                        
704     opts = qemu_mallocz(sizeof(*opts));                                     
                                                        
705     if (id) {                                                               
                                                        
706         opts->id = qemu_strdup(id);                                         
                                                        
707     }                                                                       
                                                        
708     opts->list = list;                                                      
                                                        
709     loc_save(&opts->loc);                                                   
                                                        
710     QTAILQ_INIT(&opts->head);                                               
                                                        
711     QTAILQ_INSERT_TAIL(&list->head, opts, next);                            
                                                        
712     return opts;                                                            
                                                        
713 }                                                                           
                                                        

========================================
Output of my  attach/detach/attach
========================================
virsh # attach-disk base1 /var/lib/libvirt/images/extrastorage.img vdb
Disk attached successfully

virsh # dumpxml base1
<domain type='kvm' id='2'>
  <name>base1</name>
  <uuid>9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-0.14'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu match='exact'>
    <model>Opteron_G3</model>
    <vendor>AMD</vendor>
    <feature policy='require' name='skinit'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='mmxext'/>
    <feature policy='require' name='fxsr_opt'/>
    <feature policy='require' name='cr8legacy'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='3dnowprefetch'/>
    <feature policy='require' name='3dnowext'/>
    <feature policy='require' name='wdt'/>
    <feature policy='require' name='extapic'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='osvw'/>
    <feature policy='require' name='cmp_legacy'/>
    <feature policy='require' name='3dnow'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/dev/rbd1'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' 
function='0x0'/>
    </disk>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/var/lib/libvirt/images/extrastorage.img'/>
      <target dev='vdb' bus='virtio'/>
      <alias name='virtio-disk1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' 
function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' 
function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:a2:c1:2d'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 
function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes'/>
    <sound model='ich6'>
      <alias name='sound0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
function='0x0'/>
    </sound>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' 
function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 
function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='apparmor'>
    <label>libvirt-9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</label>
    <imagelabel>libvirt-9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</imagelabel>
  </seclabel>
</domain>

virsh # detach-disk base1 vdb
Disk detached successfully

virsh # dumpxml base1
<domain type='kvm' id='2'>
  <name>base1</name>
  <uuid>9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</uuid>
  <memory>1048576</memory>
  <currentMemory>1048576</currentMemory>
  <vcpu>2</vcpu>
  <os>
    <type arch='x86_64' machine='pc-0.14'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu match='exact'>
    <model>Opteron_G3</model>
    <vendor>AMD</vendor>
    <feature policy='require' name='skinit'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='mmxext'/>
    <feature policy='require' name='fxsr_opt'/>
    <feature policy='require' name='cr8legacy'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='3dnowprefetch'/>
    <feature policy='require' name='3dnowext'/>
    <feature policy='require' name='wdt'/>
    <feature policy='require' name='extapic'/>
    <feature policy='require' name='pdpe1gb'/>
    <feature policy='require' name='osvw'/>
    <feature policy='require' name='cmp_legacy'/>
    <feature policy='require' name='3dnow'/>
  </cpu>
  <clock offset='utc'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/dev/rbd1'/>
      <target dev='vda' bus='virtio'/>
      <alias name='virtio-disk0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' 
function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <alias name='ide0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' 
function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:a2:c1:2d'/>
      <source bridge='br0'/>
      <target dev='vnet0'/>
      <model type='virtio'/>
      <alias name='net0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' 
function='0x0'/>
    </interface>
    <serial type='pty'>
      <source path='/dev/pts/1'/>
      <target port='0'/>
      <alias name='serial0'/>
    </serial>
    <console type='pty' tty='/dev/pts/1'>
      <source path='/dev/pts/1'/>
      <target type='serial' port='0'/>
      <alias name='serial0'/>
    </console>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5900' autoport='yes'/>
    <sound model='ich6'>
      <alias name='sound0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' 
function='0x0'/>
    </sound>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <alias name='video0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' 
function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <alias name='balloon0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' 
function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='dynamic' model='apparmor'>
    <label>libvirt-9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</label>
    <imagelabel>libvirt-9ebebe7f-7dfa-4735-a80c-c19ebe4e1459</imagelabel>
  </seclabel>
</domain>

virsh # attach-disk base1 /var/lib/libvirt/images/extrastorage.img vdb
error: Failed to attach disk
error: operation failed: adding 
virtio-blk-pci,bus=pci.0,addr=0x8,drive=drive-virtio-disk1,id=virtio-disk1 
device failed: Duplicate ID 'virtio-disk1' for device
======================================================

** Affects: qemu-kvm (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/897750

Title:
  libvirt/kvm problem with disk attach/detach/reattach on running virt

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/qemu-kvm/+bug/897750/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to