iscsi: put data_cnt_in operation in iscsi task get and free
Purpose: Simply the code, doing data_cnt_in every where will make the code diffcult to maintain. If we put the management in iscsi task get and free related function, then the code will be easy to be read and easy to maintain. Change-Id: Ib9af067326630657877a94afc2eb0db28f5d5fd1 Signed-off-by: Ziye Yang <ziye.yang@intel.com> Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/474914 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
1435ee36fa
commit
fe5a969662
@ -305,15 +305,8 @@ void
|
||||
spdk_iscsi_conn_free_pdu(struct spdk_iscsi_conn *conn, struct spdk_iscsi_pdu *pdu)
|
||||
{
|
||||
if (pdu->task) {
|
||||
if (pdu->bhs.opcode == ISCSI_OP_SCSI_DATAIN) {
|
||||
if (pdu->task != spdk_iscsi_task_get_primary(pdu->task)) {
|
||||
assert(conn->data_in_cnt > 0);
|
||||
conn->data_in_cnt--;
|
||||
spdk_iscsi_conn_handle_queued_datain_tasks(conn);
|
||||
}
|
||||
}
|
||||
|
||||
spdk_iscsi_task_put(pdu->task);
|
||||
spdk_iscsi_conn_handle_queued_datain_tasks(conn);
|
||||
}
|
||||
spdk_put_pdu(pdu);
|
||||
}
|
||||
@ -348,10 +341,6 @@ _iscsi_conn_free_tasks(struct spdk_iscsi_conn *conn, struct spdk_scsi_lun *lun)
|
||||
TAILQ_FOREACH_SAFE(iscsi_task, &conn->queued_datain_tasks, link, tmp_iscsi_task) {
|
||||
if ((!iscsi_task->is_queued) && (lun == NULL || lun == iscsi_task->scsi.lun)) {
|
||||
TAILQ_REMOVE(&conn->queued_datain_tasks, iscsi_task, link);
|
||||
if (iscsi_task->current_datain_offset > 0) {
|
||||
assert(conn->data_in_cnt > 0);
|
||||
conn->data_in_cnt--;
|
||||
}
|
||||
spdk_iscsi_task_put(iscsi_task);
|
||||
}
|
||||
}
|
||||
|
@ -3035,10 +3035,6 @@ iscsi_transfer_in(struct spdk_iscsi_conn *conn, struct spdk_iscsi_task *task)
|
||||
transfer_len = task->scsi.length;
|
||||
|
||||
if (task->scsi.status != SPDK_SCSI_STATUS_GOOD) {
|
||||
if (task != primary) {
|
||||
assert(conn->data_in_cnt > 0);
|
||||
conn->data_in_cnt--;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -3261,7 +3257,6 @@ int spdk_iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn)
|
||||
assert(subtask != NULL);
|
||||
subtask->scsi.offset = task->current_datain_offset;
|
||||
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
||||
conn->data_in_cnt++;
|
||||
|
||||
if (spdk_scsi_dev_get_lun(conn->dev, task->lun_id) == NULL) {
|
||||
/* Stop submitting split read I/Os for remaining data. */
|
||||
@ -3604,7 +3599,6 @@ _iscsi_conn_abort_queued_datain_task(struct spdk_iscsi_conn *conn,
|
||||
subtask->scsi.length = DMIN32(SPDK_BDEV_LARGE_BUF_MAX_SIZE, remaining_size);
|
||||
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
||||
task->current_datain_offset += subtask->scsi.length;
|
||||
conn->data_in_cnt++;
|
||||
|
||||
subtask->scsi.transfer_len = subtask->scsi.length;
|
||||
spdk_scsi_task_process_abort(&subtask->scsi);
|
||||
|
@ -43,6 +43,11 @@ iscsi_task_free(struct spdk_scsi_task *scsi_task)
|
||||
struct spdk_iscsi_task *task = spdk_iscsi_task_from_scsi_task(scsi_task);
|
||||
|
||||
if (task->parent) {
|
||||
if (task->scsi.dxfer_dir == SPDK_SCSI_DIR_FROM_DEV) {
|
||||
assert(task->conn->data_in_cnt > 0);
|
||||
task->conn->data_in_cnt--;
|
||||
}
|
||||
|
||||
spdk_scsi_task_put(&task->parent->scsi);
|
||||
task->parent = NULL;
|
||||
}
|
||||
@ -65,6 +70,7 @@ spdk_iscsi_task_get(struct spdk_iscsi_conn *conn, struct spdk_iscsi_task *parent
|
||||
abort();
|
||||
}
|
||||
|
||||
assert(conn != NULL);
|
||||
memset(task, 0, sizeof(*task));
|
||||
task->conn = conn;
|
||||
assert(conn->pending_task_cnt < UINT32_MAX);
|
||||
@ -83,6 +89,9 @@ spdk_iscsi_task_get(struct spdk_iscsi_conn *conn, struct spdk_iscsi_task *parent
|
||||
task->scsi.cdb = parent->scsi.cdb;
|
||||
task->scsi.target_port = parent->scsi.target_port;
|
||||
task->scsi.initiator_port = parent->scsi.initiator_port;
|
||||
if (task->scsi.dxfer_dir == SPDK_SCSI_DIR_FROM_DEV) {
|
||||
conn->data_in_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
return task;
|
||||
|
@ -48,6 +48,9 @@ spdk_iscsi_task_get(struct spdk_iscsi_conn *conn,
|
||||
task->scsi.cdb = parent->scsi.cdb;
|
||||
task->scsi.target_port = parent->scsi.target_port;
|
||||
task->scsi.initiator_port = parent->scsi.initiator_port;
|
||||
if (conn && (task->scsi.dxfer_dir == SPDK_SCSI_DIR_FROM_DEV)) {
|
||||
conn->data_in_cnt++;
|
||||
}
|
||||
}
|
||||
|
||||
task->scsi.iovs = &task->scsi.iov;
|
||||
|
@ -162,7 +162,6 @@ DEFINE_STUB(spdk_del_transfer_task, bool,
|
||||
int
|
||||
spdk_iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn)
|
||||
{
|
||||
CU_ASSERT(TAILQ_EMPTY(&conn->write_pdu_list));
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user