qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Serge Hallyn <897750@bugs.launchpad.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [Bug 897750] Re: libvirt/kvm problem with disk attach/detach/reattach	on running virt
Date: Tue, 29 Nov 2011 19:31:32 -0000	[thread overview]
Message-ID: <20111129193132.9969.74857.malone@wampee.canonical.com> (raw)
In-Reply-To: 20111129155310.23239.76602.malonedeb@wampee.canonical.com

(qemu) device_add driver=ne2k_pci,id=x
(qemu) device_del x
(qemu) device_add driver=ne2k_pci,id=x
Duplicate ID 'x' for device

It appears that drive_add/drive_del works fine, but device_del does not
fully delete its members.

This happens with today's git HEAD of qemu as well, in other words it
affects upstream.


** Also affects: qemu
   Importance: Undecided
       Status: New

-- 
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:
  New
Status in “qemu-kvm” package in Ubuntu:
  Confirmed

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	other threads:[~2011-11-29 19:40 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20111129155310.23239.76602.malonedeb@wampee.canonical.com>
2011-11-29 19:31 ` Serge Hallyn [this message]
2011-12-14 17:10 ` [Qemu-devel] [Bug 897750] Re: libvirt/kvm problem with disk attach/detach/reattach on running virt Justin L Werner
2011-12-19 22:32 ` Justin L Werner
2012-07-24  8:06 ` wangpan
2012-07-27 19:10 ` Serge Hallyn
2012-07-27 19:15 ` Serge Hallyn
2012-07-27 19:22 ` Scott Moser
2012-07-30  6:50 ` Stefan Bader
2012-08-06 14:26 ` Serge Hallyn
2015-01-27 13:36 ` Stefan Bader
2015-01-28 11:49 ` Serge Hallyn
2016-12-15 15:58 ` Thomas Huth
2017-02-14  4:17 ` Launchpad Bug Tracker
2017-02-14  4:17 ` Launchpad Bug Tracker

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111129193132.9969.74857.malone@wampee.canonical.com \
    --to=897750@bugs.launchpad.net \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).