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:
Ziye Yang 2019-11-18 23:32:35 +08:00 committed by Tomasz Zawadzki
parent 1435ee36fa
commit fe5a969662
5 changed files with 13 additions and 19 deletions

View File

@ -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);
}
}

View File

@ -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);

View File

@ -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;

View File

@ -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;

View File

@ -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;
}