Revision c5bf71a9 hw/spapr_vscsi.c

b/hw/spapr_vscsi.c
121 121
    return NULL;
122 122
}
123 123

  
124
static void vscsi_put_req(VSCSIState *s, vscsi_req *req)
124
static void vscsi_put_req(vscsi_req *req)
125 125
{
126 126
    if (req->sreq != NULL) {
127 127
        scsi_req_unref(req->sreq);
......
130 130
    req->active = 0;
131 131
}
132 132

  
133
static vscsi_req *vscsi_find_req(VSCSIState *s, SCSIRequest *req)
134
{
135
    uint32_t tag = req->tag;
136
    if (tag >= VSCSI_REQ_LIMIT || !s->reqs[tag].active) {
137
        return NULL;
138
    }
139
    return &s->reqs[tag];
140
}
141

  
142 133
static void vscsi_decode_id_lun(uint64_t srp_lun, int *id, int *lun)
143 134
{
144 135
    /* XXX Figure that one out properly ! This is crackpot */
......
454 445
    if (n) {
455 446
        req->senselen = n;
456 447
        vscsi_send_rsp(s, req, CHECK_CONDITION, 0, 0);
457
        vscsi_put_req(s, req);
448
        vscsi_put_req(req);
458 449
        return;
459 450
    }
460 451

  
......
483 474
static void vscsi_transfer_data(SCSIRequest *sreq, uint32_t len)
484 475
{
485 476
    VSCSIState *s = DO_UPCAST(VSCSIState, vdev.qdev, sreq->bus->qbus.parent);
486
    vscsi_req *req = vscsi_find_req(s, sreq);
477
    vscsi_req *req = sreq->hba_private;
487 478
    uint8_t *buf;
488 479
    int rc = 0;
489 480

  
......
531 522
static void vscsi_command_complete(SCSIRequest *sreq, uint32_t status)
532 523
{
533 524
    VSCSIState *s = DO_UPCAST(VSCSIState, vdev.qdev, sreq->bus->qbus.parent);
534
    vscsi_req *req = vscsi_find_req(s, sreq);
525
    vscsi_req *req = sreq->hba_private;
535 526
    int32_t res_in = 0, res_out = 0;
536 527

  
537 528
    dprintf("VSCSI: SCSI cmd complete, r=0x%x tag=0x%x status=0x%x, req=%p\n",
......
563 554
        }
564 555
    }
565 556
    vscsi_send_rsp(s, req, 0, res_in, res_out);
566
    vscsi_put_req(s, req);
557
    vscsi_put_req(req);
567 558
}
568 559

  
569 560
static void vscsi_request_cancelled(SCSIRequest *sreq)
570 561
{
571
    VSCSIState *s = DO_UPCAST(VSCSIState, vdev.qdev, sreq->bus->qbus.parent);
572
    vscsi_req *req = vscsi_find_req(s, sreq);
562
    vscsi_req *req = sreq->hba_private;
573 563

  
574
    vscsi_put_req(s, req);
564
    vscsi_put_req(req);
575 565
}
576 566

  
577 567
static void vscsi_process_login(VSCSIState *s, vscsi_req *req)
......
659 649
    }
660 650

  
661 651
    req->lun = lun;
662
    req->sreq = scsi_req_new(sdev, req->qtag, lun);
652
    req->sreq = scsi_req_new(sdev, req->qtag, lun, req);
663 653
    n = scsi_req_enqueue(req->sreq, srp->cmd.cdb);
664 654

  
665 655
    dprintf("VSCSI: Queued command tag 0x%x CMD 0x%x ID %d LUN %d ret: %d\n",
......
858 848
    }
859 849

  
860 850
    if (done) {
861
        vscsi_put_req(s, req);
851
        vscsi_put_req(req);
862 852
    }
863 853
}
864 854

  

Also available in: Unified diff