IB/iser: Simplify send flow/descriptors
Simplify and shrink the logic/code used for the send descriptors. Changes include removing struct iser_dto (an unnecessary abstraction), using struct iser_regd_buf only for handling SCSI commands, using dma_sync instead of dma_map/unmap, etc. Signed-off-by: Or Gerlitz <ogerlitz@voltaire.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
committed by
Roland Dreier
parent
78ad0a34dc
commit
f19624aa92
@ -128,6 +128,28 @@ static int iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int iser_initialize_task_headers(struct iscsi_task *task,
|
||||
struct iser_tx_desc *tx_desc)
|
||||
{
|
||||
struct iscsi_iser_conn *iser_conn = task->conn->dd_data;
|
||||
struct iser_device *device = iser_conn->ib_conn->device;
|
||||
struct iscsi_iser_task *iser_task = task->dd_data;
|
||||
u64 dma_addr;
|
||||
|
||||
dma_addr = ib_dma_map_single(device->ib_device, (void *)tx_desc,
|
||||
ISER_HEADERS_LEN, DMA_TO_DEVICE);
|
||||
if (ib_dma_mapping_error(device->ib_device, dma_addr))
|
||||
return -ENOMEM;
|
||||
|
||||
tx_desc->dma_addr = dma_addr;
|
||||
tx_desc->tx_sg[0].addr = tx_desc->dma_addr;
|
||||
tx_desc->tx_sg[0].length = ISER_HEADERS_LEN;
|
||||
tx_desc->tx_sg[0].lkey = device->mr->lkey;
|
||||
|
||||
iser_task->headers_initialized = 1;
|
||||
iser_task->iser_conn = iser_conn;
|
||||
return 0;
|
||||
}
|
||||
/**
|
||||
* iscsi_iser_task_init - Initialize task
|
||||
* @task: iscsi task
|
||||
@ -137,17 +159,17 @@ static int iscsi_iser_pdu_alloc(struct iscsi_task *task, uint8_t opcode)
|
||||
static int
|
||||
iscsi_iser_task_init(struct iscsi_task *task)
|
||||
{
|
||||
struct iscsi_iser_conn *iser_conn = task->conn->dd_data;
|
||||
struct iscsi_iser_task *iser_task = task->dd_data;
|
||||
|
||||
if (!iser_task->headers_initialized)
|
||||
if (iser_initialize_task_headers(task, &iser_task->desc))
|
||||
return -ENOMEM;
|
||||
|
||||
/* mgmt task */
|
||||
if (!task->sc) {
|
||||
iser_task->desc.data = task->data;
|
||||
if (!task->sc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
iser_task->command_sent = 0;
|
||||
iser_task->iser_conn = iser_conn;
|
||||
iser_task_rdma_init(iser_task);
|
||||
return 0;
|
||||
}
|
||||
@ -675,7 +697,7 @@ static int __init iser_init(void)
|
||||
memset(&ig, 0, sizeof(struct iser_global));
|
||||
|
||||
ig.desc_cache = kmem_cache_create("iser_descriptors",
|
||||
sizeof (struct iser_desc),
|
||||
sizeof(struct iser_tx_desc),
|
||||
0, SLAB_HWCACHE_ALIGN,
|
||||
NULL);
|
||||
if (ig.desc_cache == NULL)
|
||||
|
Reference in New Issue
Block a user