From Richard Sharpe
Add a mechanism where residual overflow/underflow can be reportad back to the application We probably need somethinf for bidir residuals at some stage too
This commit is contained in:
@@ -107,6 +107,12 @@ struct scsi_allocated_memory {
|
|||||||
void *ptr;
|
void *ptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum scsi_residual {
|
||||||
|
SCSI_RESIDUAL_NO_RESIDUAL = 0,
|
||||||
|
SCSI_RESIDUAL_UNDERFLOW,
|
||||||
|
SCSI_RESIDUAL_OVERFLOW
|
||||||
|
};
|
||||||
|
|
||||||
struct scsi_task {
|
struct scsi_task {
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
@@ -123,6 +129,8 @@ struct scsi_task {
|
|||||||
struct scsi_modesense6_params modesense6;
|
struct scsi_modesense6_params modesense6;
|
||||||
} params;
|
} params;
|
||||||
|
|
||||||
|
enum scsi_residual residual_status;
|
||||||
|
int residual;
|
||||||
struct scsi_sense sense;
|
struct scsi_sense sense;
|
||||||
struct scsi_data datain;
|
struct scsi_data datain;
|
||||||
struct scsi_allocated_memory *mem;
|
struct scsi_allocated_memory *mem;
|
||||||
|
|||||||
@@ -354,6 +354,21 @@ iscsi_process_scsi_reply(struct iscsi_context *iscsi, struct iscsi_pdu *pdu,
|
|||||||
task->datain.data = pdu->indata.data;
|
task->datain.data = pdu->indata.data;
|
||||||
task->datain.size = pdu->indata.size;
|
task->datain.size = pdu->indata.size;
|
||||||
|
|
||||||
|
task->residual_status = SCSI_RESIDUAL_NO_RESIDUAL;
|
||||||
|
task->residual = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These flags should only be set if the S flag is also set
|
||||||
|
*/
|
||||||
|
if (flags & (ISCSI_PDU_DATA_RESIDUAL_OVERFLOW|ISCSI_PDU_DATA_RESIDUAL_UNDERFLOW)) {
|
||||||
|
task->residual = ntohl(&in->hdr[44]);
|
||||||
|
if (flags & ISCSI_PDU_DATA_RESIDUAL_UNDERFLOW) {
|
||||||
|
task->residual_status = SCSI_RESIDUAL_UNDERFLOW;
|
||||||
|
} else {
|
||||||
|
task->residual_status = SCSI_RESIDUAL_OVERFLOW;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pdu->indata.data = NULL;
|
pdu->indata.data = NULL;
|
||||||
pdu->indata.size = 0;
|
pdu->indata.size = 0;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user