Revision f8b6d672

b/hw/scsi-generic.c
455 455
    return (buf[9] << 16) | (buf[10] << 8) | buf[11];
456 456
}
457 457

  
458
static void scsi_destroy(SCSIDevice *d)
458
static void scsi_generic_purge_requests(SCSIGenericState *s)
459 459
{
460
    SCSIGenericState *s = DO_UPCAST(SCSIGenericState, qdev, d);
461 460
    SCSIGenericReq *r;
462 461

  
463 462
    while (!QTAILQ_EMPTY(&s->qdev.requests)) {
464 463
        r = DO_UPCAST(SCSIGenericReq, req, QTAILQ_FIRST(&s->qdev.requests));
464
        if (r->req.aiocb) {
465
            bdrv_aio_cancel(r->req.aiocb);
466
        }
465 467
        scsi_remove_request(r);
466 468
    }
469
}
470

  
471
static void scsi_generic_reset(DeviceState *dev)
472
{
473
    SCSIGenericState *s = DO_UPCAST(SCSIGenericState, qdev.qdev, dev);
474

  
475
    scsi_generic_purge_requests(s);
476
}
477

  
478
static void scsi_destroy(SCSIDevice *d)
479
{
480
    SCSIGenericState *s = DO_UPCAST(SCSIGenericState, qdev, d);
481

  
482
    scsi_generic_purge_requests(s);
467 483
    blockdev_mark_auto_del(s->qdev.conf.bs);
468 484
}
469 485

  
......
537 553
    .qdev.name    = "scsi-generic",
538 554
    .qdev.desc    = "pass through generic scsi device (/dev/sg*)",
539 555
    .qdev.size    = sizeof(SCSIGenericState),
556
    .qdev.reset   = scsi_generic_reset,
540 557
    .init         = scsi_generic_initfn,
541 558
    .destroy      = scsi_destroy,
542 559
    .send_command = scsi_send_command,

Also available in: Unified diff