scsi: introduce scsi_req_abort
This covers the case of canceling a request's I/O and still completing it. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de>
This commit is contained in:
parent
c557e88915
commit
19d110ab8a
|
@ -549,6 +549,15 @@ void scsi_req_complete(SCSIRequest *req)
|
|||
scsi_req_unref(req);
|
||||
}
|
||||
|
||||
void scsi_req_abort(SCSIRequest *req, int status)
|
||||
{
|
||||
req->status = status;
|
||||
if (req->dev && req->dev->info->cancel_io) {
|
||||
req->dev->info->cancel_io(req);
|
||||
}
|
||||
scsi_req_complete(req);
|
||||
}
|
||||
|
||||
void scsi_device_purge_requests(SCSIDevice *sdev)
|
||||
{
|
||||
SCSIRequest *req;
|
||||
|
|
|
@ -114,6 +114,7 @@ int scsi_req_parse(SCSIRequest *req, uint8_t *buf);
|
|||
void scsi_req_print(SCSIRequest *req);
|
||||
void scsi_req_data(SCSIRequest *req, int len);
|
||||
void scsi_req_complete(SCSIRequest *req);
|
||||
void scsi_req_abort(SCSIRequest *req, int status);
|
||||
void scsi_device_purge_requests(SCSIDevice *sdev);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -463,10 +463,8 @@ static void vscsi_send_request_sense(VSCSIState *s, vscsi_req *req)
|
|||
dprintf("VSCSI: Queued request sense tag 0x%x\n", req->qtag);
|
||||
if (n < 0) {
|
||||
fprintf(stderr, "VSCSI: REQUEST_SENSE wants write data !?!?!?\n");
|
||||
sdev->info->cancel_io(req->sreq);
|
||||
vscsi_makeup_sense(s, req, HARDWARE_ERROR, 0, 0);
|
||||
vscsi_send_rsp(s, req, CHECK_CONDITION, 0, 0);
|
||||
vscsi_put_req(s, req);
|
||||
scsi_req_abort(req->sreq, CHECK_CONDITION);
|
||||
return;
|
||||
} else if (n == 0) {
|
||||
return;
|
||||
|
@ -547,10 +545,8 @@ static void vscsi_command_complete(SCSIRequest *sreq, int reason, uint32_t arg)
|
|||
}
|
||||
if (rc < 0) {
|
||||
fprintf(stderr, "VSCSI: RDMA error rc=%d!\n", rc);
|
||||
sdev->info->cancel_io(sreq);
|
||||
vscsi_makeup_sense(s, req, HARDWARE_ERROR, 0, 0);
|
||||
vscsi_send_rsp(s, req, CHECK_CONDITION, 0, 0);
|
||||
vscsi_put_req(s, req);
|
||||
scsi_req_abort(req->sreq, CHECK_CONDITION);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue