mirror of
https://github.com/mii443/qemu.git
synced 2025-08-22 15:15:46 +00:00
scsi: inline sg_io_sense_from_errno() into the callers.
Currently sg_io_sense_from_errno() converts the two input parameters 'errno' and 'io_hdr' into sense code and SCSI status. Having split the function off into scsi_sense_from_errno() and scsi_sense_from_host_status(), both of which are available generically, we now inline the logic in the callers so that scsi-disk and scsi-generic will be able to pass host_status to the HBA. Signed-off-by: Hannes Reinecke <hare@suse.de> Message-Id: <20201116184041.60465-7-hare@suse.de> [Put together from "scsi-disk: Add sg_io callback to evaluate status" and what remains of "scsi: split sg_io_sense_from_errno() in two functions", with many other fixes. - Paolo] Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
9738c65720
commit
a108557bbf
@ -149,19 +149,29 @@ static int do_sgio_worker(void *opaque)
|
||||
io_hdr.dxferp = (char *)data->buf;
|
||||
io_hdr.dxfer_len = data->sz;
|
||||
ret = ioctl(data->fd, SG_IO, &io_hdr);
|
||||
status = sg_io_sense_from_errno(ret < 0 ? errno : 0, &io_hdr,
|
||||
&sense_code);
|
||||
|
||||
if (ret < 0) {
|
||||
status = scsi_sense_from_errno(errno, &sense_code);
|
||||
if (status == CHECK_CONDITION) {
|
||||
scsi_build_sense(data->sense, sense_code);
|
||||
}
|
||||
} else if (io_hdr.host_status != SCSI_HOST_OK) {
|
||||
status = scsi_sense_from_host_status(io_hdr.host_status, &sense_code);
|
||||
if (status == CHECK_CONDITION) {
|
||||
scsi_build_sense(data->sense, sense_code);
|
||||
}
|
||||
} else if (io_hdr.driver_status & SG_ERR_DRIVER_TIMEOUT) {
|
||||
status = BUSY;
|
||||
} else {
|
||||
status = io_hdr.status;
|
||||
}
|
||||
|
||||
if (status == GOOD) {
|
||||
data->sz -= io_hdr.resid;
|
||||
} else {
|
||||
data->sz = 0;
|
||||
}
|
||||
|
||||
if (status == CHECK_CONDITION &&
|
||||
!(io_hdr.driver_status & SG_ERR_DRIVER_SENSE)) {
|
||||
scsi_build_sense(data->sense, sense_code);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user