diff options
Diffstat (limited to 'usr/src')
| -rw-r--r-- | usr/src/uts/common/io/comstar/port/iscsit/iscsit.c | 15 | ||||
| -rw-r--r-- | usr/src/uts/common/io/idm/idm_so.c | 4 |
2 files changed, 11 insertions, 8 deletions
diff --git a/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c b/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c index 55977eb11f..ba0ca1aa50 100644 --- a/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c +++ b/usr/src/uts/common/io/comstar/port/iscsit/iscsit.c @@ -1017,6 +1017,13 @@ iscsit_update_statsn(idm_task_t *idm_task, idm_pdu_t *pdu) rsp->flags |= ISCSI_FLAG_CMD_UNDERFLOW; } rsp->residual_count = htonl(task->task_resid); + + /* + * Removing the task from the session task list + * just before the status is sent in the last + * Data PDU transfer + */ + iscsit_task_done(itask); } } @@ -1038,9 +1045,6 @@ iscsit_build_hdr(idm_task_t *idm_task, idm_pdu_t *pdu, uint8_t opcode) dh->opcode = opcode; dh->itt = itask->it_itt; dh->ttt = itask->it_ttt; - /* Maintain current statsn for RTT responses */ - dh->statsn = (opcode == ISCSI_OP_RTT_RSP) ? - htonl(itask->it_ict->ict_statsn) : 0; dh->expcmdsn = htonl(itask->it_ict->ict_sess->ist_expcmdsn); dh->maxcmdsn = htonl(itask->it_ict->ict_sess->ist_maxcmdsn); @@ -1473,10 +1477,9 @@ iscsit_buf_xfer_cb(idm_buf_t *idb, idm_status_t status) */ if (idb->idb_task_binding->idt_flags & IDM_TASK_PHASECOLLAPSE_SUCCESS) { /* - * Mark task complete, remove task from the session task - * list and notify COMSTAR that the status has been sent. + * Mark task complete and notify COMSTAR + * that the status has been sent. */ - iscsit_task_done(itask); itask->it_idm_task->idt_state = TASK_COMPLETE; stmf_send_status_done(itask->it_stmf_task, iscsit_idm_to_stmf(status), STMF_IOF_LPORT_DONE); diff --git a/usr/src/uts/common/io/idm/idm_so.c b/usr/src/uts/common/io/idm/idm_so.c index a9a6debe32..930bea3493 100644 --- a/usr/src/uts/common/io/idm/idm_so.c +++ b/usr/src/uts/common/io/idm/idm_so.c @@ -2394,10 +2394,10 @@ idm_so_buf_rx_from_ini(idm_task_t *idt, idm_buf_t *idb) pdu = kmem_cache_alloc(idm.idm_sotx_pdu_cache, KM_SLEEP); pdu->isp_ic = idt->idt_ic; - pdu->isp_flags = 0; /* initialize isp_flags */ + pdu->isp_flags = IDM_PDU_SET_STATSN; bzero(pdu->isp_hdr, sizeof (iscsi_rtt_hdr_t)); - /* iSCSI layer fills the TTT, ITT, StatSN, ExpCmdSN, MaxCmdSN */ + /* iSCSI layer fills the TTT, ITT, ExpCmdSN, MaxCmdSN */ (*idt->idt_ic->ic_conn_ops.icb_build_hdr)(idt, pdu, ISCSI_OP_RTT_RSP); /* set the rttsn, rtt.flags, rtt.data_offset and rtt.data_length */ |
