Commit fe5a9696 authored by Ziye Yang's avatar Ziye Yang Committed by Tomasz Zawadzki
Browse files

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: default avatarZiye Yang <ziye.yang@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/474914


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
parent 1435ee36
Loading
Loading
Loading
Loading
+1 −12
Original line number Diff line number Diff line
@@ -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);
		}
	}
+0 −6
Original line number Diff line number Diff line
@@ -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);
+9 −0
Original line number Diff line number Diff line
@@ -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;
+3 −0
Original line number Diff line number Diff line
@@ -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;
+0 −1
Original line number Diff line number Diff line
@@ -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;
}