Revision 19d110ab

b/hw/scsi-bus.c
549 549
    scsi_req_unref(req);
550 550
}
551 551

  
552
void scsi_req_abort(SCSIRequest *req, int status)
553
{
554
    req->status = status;
555
    if (req->dev && req->dev->info->cancel_io) {
556
        req->dev->info->cancel_io(req);
557
    }
558
    scsi_req_complete(req);
559
}
560

  
552 561
void scsi_device_purge_requests(SCSIDevice *sdev)
553 562
{
554 563
    SCSIRequest *req;
b/hw/scsi.h
114 114
void scsi_req_print(SCSIRequest *req);
115 115
void scsi_req_data(SCSIRequest *req, int len);
116 116
void scsi_req_complete(SCSIRequest *req);
117
void scsi_req_abort(SCSIRequest *req, int status);
117 118
void scsi_device_purge_requests(SCSIDevice *sdev);
118 119

  
119 120
#endif
b/hw/spapr_vscsi.c
463 463
    dprintf("VSCSI: Queued request sense tag 0x%x\n", req->qtag);
464 464
    if (n < 0) {
465 465
        fprintf(stderr, "VSCSI: REQUEST_SENSE wants write data !?!?!?\n");
466
        sdev->info->cancel_io(req->sreq);
467 466
        vscsi_makeup_sense(s, req, HARDWARE_ERROR, 0, 0);
468
        vscsi_send_rsp(s, req, CHECK_CONDITION, 0, 0);
469
        vscsi_put_req(s, req);
467
        scsi_req_abort(req->sreq, CHECK_CONDITION);
470 468
        return;
471 469
    } else if (n == 0) {
472 470
        return;
......
547 545
    }
548 546
    if (rc < 0) {
549 547
        fprintf(stderr, "VSCSI: RDMA error rc=%d!\n", rc);
550
        sdev->info->cancel_io(sreq);
551 548
        vscsi_makeup_sense(s, req, HARDWARE_ERROR, 0, 0);
552
        vscsi_send_rsp(s, req, CHECK_CONDITION, 0, 0);
553
        vscsi_put_req(s, req);
549
        scsi_req_abort(req->sreq, CHECK_CONDITION);
554 550
        return;
555 551
    }
556 552

  

Also available in: Unified diff