Commit 133dc1e6 authored by Daniel Verkamp's avatar Daniel Verkamp
Browse files

iscsi: clean up iSCSI/SCSI task conversions



Add a helper function to find the iSCSI task given its nested SCSI task
structure, and use it to remove all casting between spdk_scsi_task and
spdk_iscsi_task.

Change-Id: Idc7c6d0a3b4d53041916d25a1bdecedfb56b94f9
Signed-off-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
parent b347d551
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@
static void
spdk_iscsi_task_free(struct spdk_scsi_task *scsi_task)
{
	struct spdk_iscsi_task *task = (struct spdk_iscsi_task *)scsi_task;
	struct spdk_iscsi_task *task = spdk_iscsi_task_from_scsi_task(scsi_task);

	spdk_iscsi_task_disassociate_pdu(task);
	rte_mempool_put(g_spdk_iscsi.task_pool, (void *)task);
@@ -66,9 +66,9 @@ spdk_iscsi_task_get(struct spdk_iscsi_conn *conn, struct spdk_iscsi_task *parent
	task->conn = conn;
	assert(conn->pending_task_cnt < UINT32_MAX);
	conn->pending_task_cnt++;
	spdk_scsi_task_construct((struct spdk_scsi_task *)task,
	spdk_scsi_task_construct(&task->scsi,
				 spdk_iscsi_task_free,
				 (struct spdk_scsi_task *)parent);
				 parent ? &parent->scsi : NULL);
	if (parent) {
		task->tag = parent->tag;
	}
+7 −1
Original line number Diff line number Diff line
@@ -157,6 +157,12 @@ spdk_iscsi_task_get_cmdsn(struct spdk_iscsi_task *task)
struct spdk_iscsi_task *spdk_iscsi_task_get(struct spdk_iscsi_conn *conn,
		struct spdk_iscsi_task *parent);

static inline struct spdk_iscsi_task *
spdk_iscsi_task_from_scsi_task(struct spdk_scsi_task *task)
{
	return (struct spdk_iscsi_task *)((uintptr_t)task - offsetof(struct spdk_iscsi_task, scsi));
}

static inline struct spdk_iscsi_task *
spdk_iscsi_task_get_primary(struct spdk_iscsi_task *task)
{
@@ -165,7 +171,7 @@ spdk_iscsi_task_get_primary(struct spdk_iscsi_task *task)

	scsi_task = &task->scsi;
	scsi_primary_task = spdk_scsi_task_get_primary(scsi_task);
	return (struct spdk_iscsi_task *)scsi_primary_task;
	return spdk_iscsi_task_from_scsi_task(scsi_primary_task);
}

#endif /* SPDK_ISCSI_TASK_H */