Commit b56bdb328a9abae5035488e885c8e5fbaa5ce980
1 parent
a9f277ba
delete block device
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2126 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
8 additions
and
1 deletions
hw/usb-msd.c
@@ -35,6 +35,7 @@ typedef struct { | @@ -35,6 +35,7 @@ typedef struct { | ||
35 | uint32_t data_len; | 35 | uint32_t data_len; |
36 | uint32_t transfer_len; | 36 | uint32_t transfer_len; |
37 | uint32_t tag; | 37 | uint32_t tag; |
38 | + BlockDriverState *bs; | ||
38 | SCSIDevice *scsi_dev; | 39 | SCSIDevice *scsi_dev; |
39 | int result; | 40 | int result; |
40 | /* For async completion. */ | 41 | /* For async completion. */ |
@@ -406,6 +407,7 @@ static void usb_msd_handle_destroy(USBDevice *dev) | @@ -406,6 +407,7 @@ static void usb_msd_handle_destroy(USBDevice *dev) | ||
406 | MSDState *s = (MSDState *)dev; | 407 | MSDState *s = (MSDState *)dev; |
407 | 408 | ||
408 | scsi_disk_destroy(s->scsi_dev); | 409 | scsi_disk_destroy(s->scsi_dev); |
410 | + bdrv_delete(s->bs); | ||
409 | qemu_free(s); | 411 | qemu_free(s); |
410 | } | 412 | } |
411 | 413 | ||
@@ -419,7 +421,9 @@ USBDevice *usb_msd_init(const char *filename) | @@ -419,7 +421,9 @@ USBDevice *usb_msd_init(const char *filename) | ||
419 | return NULL; | 421 | return NULL; |
420 | 422 | ||
421 | bdrv = bdrv_new("usb"); | 423 | bdrv = bdrv_new("usb"); |
422 | - bdrv_open(bdrv, filename, 0); | 424 | + if (bdrv_open(bdrv, filename, 0) < 0) |
425 | + goto fail; | ||
426 | + s->bs = bdrv; | ||
423 | 427 | ||
424 | s->dev.speed = USB_SPEED_FULL; | 428 | s->dev.speed = USB_SPEED_FULL; |
425 | s->dev.handle_packet = usb_generic_handle_packet; | 429 | s->dev.handle_packet = usb_generic_handle_packet; |
@@ -435,4 +439,7 @@ USBDevice *usb_msd_init(const char *filename) | @@ -435,4 +439,7 @@ USBDevice *usb_msd_init(const char *filename) | ||
435 | s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s); | 439 | s->scsi_dev = scsi_disk_init(bdrv, usb_msd_command_complete, s); |
436 | usb_msd_handle_reset((USBDevice *)s); | 440 | usb_msd_handle_reset((USBDevice *)s); |
437 | return (USBDevice *)s; | 441 | return (USBDevice *)s; |
442 | + fail: | ||
443 | + qemu_free(s); | ||
444 | + return NULL; | ||
438 | } | 445 | } |