Commit 4ccf74ab authored by Daniel Verkamp's avatar Daniel Verkamp
Browse files

scsi: move subtask_list to spdk_iscsi_task



The SCSI layer doesn't use subtasks; these are an iSCSI layer concept.

Change-Id: I83871f02362f10fd4ecd4b2a1544eb76bfa53595
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent 6f01da76
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -160,7 +160,6 @@ struct spdk_scsi_task {
	uint32_t *owner_task_ctr;

	uint32_t abort_id;
	TAILQ_HEAD(subtask_list, spdk_scsi_task) subtask_list;
};

struct spdk_scsi_port;
+14 −14
Original line number Diff line number Diff line
@@ -868,15 +868,15 @@ static void
process_completed_read_subtask_list(struct spdk_iscsi_conn *conn,
				    struct spdk_iscsi_task *primary)
{
	struct spdk_scsi_task *tmp;

	while (!TAILQ_EMPTY(&primary->scsi.subtask_list)) {
		tmp = TAILQ_FIRST(&primary->scsi.subtask_list);
		if (tmp->offset == primary->scsi.bytes_completed) {
			TAILQ_REMOVE(&primary->scsi.subtask_list, tmp, scsi_link);
			primary->scsi.bytes_completed += tmp->length;
			spdk_iscsi_task_response(conn, (struct spdk_iscsi_task *)tmp);
			spdk_iscsi_task_put((struct spdk_iscsi_task *)tmp);
	struct spdk_iscsi_task *tmp;

	while (!TAILQ_EMPTY(&primary->subtask_list)) {
		tmp = TAILQ_FIRST(&primary->subtask_list);
		if (tmp->scsi.offset == primary->scsi.bytes_completed) {
			TAILQ_REMOVE(&primary->subtask_list, tmp, subtask_link);
			primary->scsi.bytes_completed += tmp->scsi.length;
			spdk_iscsi_task_response(conn, tmp);
			spdk_iscsi_task_put(tmp);
		} else {
			break;
		}
@@ -888,20 +888,20 @@ process_read_task_completion(struct spdk_iscsi_conn *conn,
			     struct spdk_iscsi_task *task,
			     struct spdk_iscsi_task *primary)
{
	struct spdk_scsi_task *tmp;
	struct spdk_iscsi_task *tmp;
	bool flag = false;

	if ((task != primary) &&
	    (task->scsi.offset != primary->scsi.bytes_completed)) {
		TAILQ_FOREACH(tmp, &primary->scsi.subtask_list, scsi_link) {
			if (task->scsi.offset < tmp->offset) {
				TAILQ_INSERT_BEFORE(tmp, &task->scsi, scsi_link);
		TAILQ_FOREACH(tmp, &primary->subtask_list, link) {
			if (task->scsi.offset < tmp->scsi.offset) {
				TAILQ_INSERT_BEFORE(tmp, task, subtask_link);
				flag = true;
				break;
			}
		}
		if (!flag) {
			TAILQ_INSERT_TAIL(&primary->scsi.subtask_list, &task->scsi, scsi_link);
			TAILQ_INSERT_TAIL(&primary->subtask_list, task, subtask_link);
		}
		return;
	}
+1 −1
Original line number Diff line number Diff line
@@ -2901,7 +2901,7 @@ static int spdk_iscsi_op_scsi_read(struct spdk_iscsi_conn *conn,
{
	int32_t remaining_size = 0;

	TAILQ_INIT(&task->scsi.subtask_list);
	TAILQ_INIT(&task->subtask_list);
	task->scsi.dxfer_dir = SPDK_SCSI_DIR_FROM_DEV;
	task->scsi.parent = NULL;
	task->scsi.offset = 0;
+3 −0
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@ struct spdk_iscsi_task {
	uint32_t ttt;

	TAILQ_ENTRY(spdk_iscsi_task) link;

	TAILQ_HEAD(subtask_list, spdk_iscsi_task) subtask_list;
	TAILQ_ENTRY(spdk_iscsi_task) subtask_link;
};

static inline void