iscsi: accumulate data_transferred properly for large writes
Without this fix, large writes would report underflow. Linux initiator seems to ignore the underflow condition, but ESXi initiator would properly detect it. Signed-off-by: Jim Harris <james.r.harris@intel.com> Change-Id: Icab28531c44f61a8e5529bcee989d0c2bf41d043 Reviewed-on: https://review.gerrithub.io/423906 Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
b6770c73cc
commit
42daa14f64
@ -900,10 +900,13 @@ spdk_iscsi_task_cpl(struct spdk_scsi_task *scsi_task)
|
|||||||
process_read_task_completion(conn, task, primary);
|
process_read_task_completion(conn, task, primary);
|
||||||
} else {
|
} else {
|
||||||
primary->bytes_completed += task->scsi.length;
|
primary->bytes_completed += task->scsi.length;
|
||||||
if ((task != primary) &&
|
if (task != primary) {
|
||||||
(task->scsi.status != SPDK_SCSI_STATUS_GOOD)) {
|
if (task->scsi.status == SPDK_SCSI_STATUS_GOOD) {
|
||||||
|
primary->scsi.data_transferred += task->scsi.data_transferred;
|
||||||
|
} else {
|
||||||
spdk_scsi_task_copy_status(&primary->scsi, &task->scsi);
|
spdk_scsi_task_copy_status(&primary->scsi, &task->scsi);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (primary->bytes_completed == primary->scsi.transfer_len) {
|
if (primary->bytes_completed == primary->scsi.transfer_len) {
|
||||||
spdk_del_transfer_task(conn, primary->tag);
|
spdk_del_transfer_task(conn, primary->tag);
|
||||||
|
Loading…
Reference in New Issue
Block a user