qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [Bug 897750] Re: libvirt/kvm problem with disk attach/detac


From: Thomas Huth
Subject: [Qemu-devel] [Bug 897750] Re: libvirt/kvm problem with disk attach/detach/reattach on running virt
Date: Thu, 15 Dec 2016 15:58:06 -0000

Is here still a problem left with upstream QEMU?

** Changed in: qemu
       Status: New => Incomplete

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

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

Status in QEMU:
  Incomplete
Status in qemu-kvm package in Ubuntu:
  Incomplete

Bug description:
  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
  ======================================================

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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]