Skip to contentSkip to conversation

uninit drive if drive_init failed

PATCH In review Wen Congyang 2 participants 3 messages Feb 16, 2011

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 uninit drive if drive_init failed

steps to reproduce this bug:
1. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver qcow2
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

2. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver raw
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

The format of disk image file is raw.
If we run comand 2 only, we will attach the disk successfully.

The reason of this bug is that: we do not remove dinfo from drives and dinfo->bdrv from bdrv_states if we open the disk image file failed.

---
 blockdev.c |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)
blockdev.c +9 -2
index 1333a4e..03cc000 100644
@@ -527,7 +527,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
     } else if (ro == 1) {
         if (type != IF_SCSI && type != IF_VIRTIO && type != IF_FLOPPY && type != IF_NONE) {
             error_report("readonly not supported by this bus type");
-            return NULL;
+            goto cleanup;
         }
     }
 
@@ -537,12 +537,19 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
     if (ret < 0) {
         error_report("could not open disk image %s: %s",
                      file, strerror(-ret));
-        return NULL;
+        goto cleanup;
     }
 
     if (bdrv_key_required(dinfo->bdrv))
         autostart = 0;
     return dinfo;
+
+cleanup:
+    bdrv_delete(dinfo->bdrv);
+    QTAILQ_REMOVE(&drives, dinfo, next);
+    qemu_free(dinfo->id);
+    qemu_free(dinfo);
+    return NULL;
 }
 
 void do_commit(Monitor *mon, const QDict *qdict)
Signature · 1 line
1.7.1
#1 lore raw
Quoted 9 lines · Wen Congyang

steps to reproduce this bug:
1. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver qcow2
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

2. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver raw
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

Quoted 7 lines

The format of disk image file is raw.
If we run comand 2 only, we will attach the disk successfully.

The reason of this bug is that: we do not remove dinfo from drives and dinfo->bdrv from bdrv_states if we open the disk image file failed.

Already fixed in Kevin's block tree and 0.14-rc2 (commit 08931947), although not yet in stable.

Thanks anyway!

#2 lore raw

At 02/16/2011 05:45 PM, Markus Armbruster Write:

Quoted 14 lines
Quoted 12 lines · Wen Congyang

steps to reproduce this bug:
1. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver qcow2
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

2. virsh attach-disk domain --source imagefile --target sdb --sourcetype file --driver qemu --subdriver raw
error: Failed to attach disk
error: operation failed: adding scsi-disk,bus=scsi0.0,scsi-id=1,drive=drive-scsi0-0-1,id=scsi0-0-1 device failed: Property 'scsi-disk.drive' can't find value 'drive-scsi0-0-1'

The format of disk image file is raw.
If we run comand 2 only, we will attach the disk successfully.

Quoted 7 lines
Quoted 4 lines

The reason of this bug is that: we do not remove dinfo from drives and dinfo->bdrv from bdrv_states if we open the disk image file failed.

Already fixed in Kevin's block tree and 0.14-rc2 (commit 08931947), although not yet in stable.

I only use master tree and do not notice that this bug has been fixed. Thank you for pointing it out.

Quoted 3 lines

Thanks anyway!