lib/iscsi: Rename current_datain_offset of task by current_data_offset
The following patches will aggregate multiple Data-OUT PDUs into a single write subtask and we will not be able to use reqh->buffer_offset to track the current offset of large write I/O to submit write subtasks. On the other hand, each iscsi_task or iscsi_subtask is only read or write Hence rename current_datain_offset of iscsi_task by current_data_offset in this patch. The next patch will use it to track the current offset of large write I/O Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com> Change-Id: I922582c5b9474a3c512f81d0f0425158a38a9a8d Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/6423 Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Community-CI: Mellanox Build Bot Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
This commit is contained in:
parent
00508c8ef1
commit
6d573781b5
@ -964,16 +964,16 @@ _iscsi_conn_abort_queued_datain_task(struct spdk_iscsi_conn *conn,
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(task->current_datain_offset <= task->scsi.transfer_len);
|
assert(task->current_data_offset <= task->scsi.transfer_len);
|
||||||
/* Stop split and abort read I/O for remaining data. */
|
/* Stop split and abort read I/O for remaining data. */
|
||||||
if (task->current_datain_offset < task->scsi.transfer_len) {
|
if (task->current_data_offset < task->scsi.transfer_len) {
|
||||||
remaining_size = task->scsi.transfer_len - task->current_datain_offset;
|
remaining_size = task->scsi.transfer_len - task->current_data_offset;
|
||||||
subtask = iscsi_task_get(conn, task, iscsi_task_cpl);
|
subtask = iscsi_task_get(conn, task, iscsi_task_cpl);
|
||||||
assert(subtask != NULL);
|
assert(subtask != NULL);
|
||||||
subtask->scsi.offset = task->current_datain_offset;
|
subtask->scsi.offset = task->current_data_offset;
|
||||||
subtask->scsi.length = remaining_size;
|
subtask->scsi.length = remaining_size;
|
||||||
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
||||||
task->current_datain_offset += subtask->scsi.length;
|
task->current_data_offset += subtask->scsi.length;
|
||||||
|
|
||||||
subtask->scsi.transfer_len = subtask->scsi.length;
|
subtask->scsi.transfer_len = subtask->scsi.length;
|
||||||
spdk_scsi_task_process_abort(&subtask->scsi);
|
spdk_scsi_task_process_abort(&subtask->scsi);
|
||||||
@ -983,7 +983,7 @@ _iscsi_conn_abort_queued_datain_task(struct spdk_iscsi_conn *conn,
|
|||||||
/* Remove the primary task from the list because all subtasks are submitted
|
/* Remove the primary task from the list because all subtasks are submitted
|
||||||
* or aborted.
|
* or aborted.
|
||||||
*/
|
*/
|
||||||
assert(task->current_datain_offset == task->scsi.transfer_len);
|
assert(task->current_data_offset == task->scsi.transfer_len);
|
||||||
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1034,22 +1034,22 @@ iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn)
|
|||||||
while (!TAILQ_EMPTY(&conn->queued_datain_tasks) &&
|
while (!TAILQ_EMPTY(&conn->queued_datain_tasks) &&
|
||||||
conn->data_in_cnt < g_iscsi.MaxLargeDataInPerConnection) {
|
conn->data_in_cnt < g_iscsi.MaxLargeDataInPerConnection) {
|
||||||
task = TAILQ_FIRST(&conn->queued_datain_tasks);
|
task = TAILQ_FIRST(&conn->queued_datain_tasks);
|
||||||
assert(task->current_datain_offset <= task->scsi.transfer_len);
|
assert(task->current_data_offset <= task->scsi.transfer_len);
|
||||||
if (task->current_datain_offset < task->scsi.transfer_len) {
|
if (task->current_data_offset < task->scsi.transfer_len) {
|
||||||
struct spdk_iscsi_task *subtask;
|
struct spdk_iscsi_task *subtask;
|
||||||
uint32_t remaining_size = 0;
|
uint32_t remaining_size = 0;
|
||||||
|
|
||||||
remaining_size = task->scsi.transfer_len - task->current_datain_offset;
|
remaining_size = task->scsi.transfer_len - task->current_data_offset;
|
||||||
subtask = iscsi_task_get(conn, task, iscsi_task_cpl);
|
subtask = iscsi_task_get(conn, task, iscsi_task_cpl);
|
||||||
assert(subtask != NULL);
|
assert(subtask != NULL);
|
||||||
subtask->scsi.offset = task->current_datain_offset;
|
subtask->scsi.offset = task->current_data_offset;
|
||||||
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
spdk_scsi_task_set_data(&subtask->scsi, NULL, 0);
|
||||||
|
|
||||||
if (spdk_scsi_dev_get_lun(conn->dev, task->lun_id) == NULL) {
|
if (spdk_scsi_dev_get_lun(conn->dev, task->lun_id) == NULL) {
|
||||||
/* Stop submitting split read I/Os for remaining data. */
|
/* Stop submitting split read I/Os for remaining data. */
|
||||||
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
||||||
task->current_datain_offset += remaining_size;
|
task->current_data_offset += remaining_size;
|
||||||
assert(task->current_datain_offset == task->scsi.transfer_len);
|
assert(task->current_data_offset == task->scsi.transfer_len);
|
||||||
subtask->scsi.transfer_len = remaining_size;
|
subtask->scsi.transfer_len = remaining_size;
|
||||||
spdk_scsi_task_process_null_lun(&subtask->scsi);
|
spdk_scsi_task_process_null_lun(&subtask->scsi);
|
||||||
iscsi_task_cpl(&subtask->scsi);
|
iscsi_task_cpl(&subtask->scsi);
|
||||||
@ -1057,10 +1057,10 @@ iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
subtask->scsi.length = spdk_min(SPDK_BDEV_LARGE_BUF_MAX_SIZE, remaining_size);
|
subtask->scsi.length = spdk_min(SPDK_BDEV_LARGE_BUF_MAX_SIZE, remaining_size);
|
||||||
task->current_datain_offset += subtask->scsi.length;
|
task->current_data_offset += subtask->scsi.length;
|
||||||
iscsi_queue_task(conn, subtask);
|
iscsi_queue_task(conn, subtask);
|
||||||
}
|
}
|
||||||
if (task->current_datain_offset == task->scsi.transfer_len) {
|
if (task->current_data_offset == task->scsi.transfer_len) {
|
||||||
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3252,7 +3252,7 @@ iscsi_pdu_payload_op_scsi_read(struct spdk_iscsi_conn *conn, struct spdk_iscsi_t
|
|||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
TAILQ_INIT(&task->subtask_list);
|
TAILQ_INIT(&task->subtask_list);
|
||||||
task->current_datain_offset = 0;
|
task->current_data_offset = 0;
|
||||||
TAILQ_INSERT_TAIL(&conn->queued_datain_tasks, task, link);
|
TAILQ_INSERT_TAIL(&conn->queued_datain_tasks, task, link);
|
||||||
|
|
||||||
return iscsi_conn_handle_queued_datain_tasks(conn);
|
return iscsi_conn_handle_queued_datain_tasks(conn);
|
||||||
|
@ -56,9 +56,9 @@ struct spdk_iscsi_task {
|
|||||||
uint32_t data_out_cnt;
|
uint32_t data_out_cnt;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tracks the current offset of large read io.
|
* Tracks the current offset of large read or write io.
|
||||||
*/
|
*/
|
||||||
uint32_t current_datain_offset;
|
uint32_t current_data_offset;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* next_expected_r2t_offset is used when we receive
|
* next_expected_r2t_offset is used when we receive
|
||||||
|
@ -283,21 +283,21 @@ ut_conn_create_read_tasks(struct spdk_iscsi_task *primary)
|
|||||||
uint32_t remaining_size = 0;
|
uint32_t remaining_size = 0;
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
if (primary->current_datain_offset < primary->scsi.transfer_len) {
|
if (primary->current_data_offset < primary->scsi.transfer_len) {
|
||||||
remaining_size = primary->scsi.transfer_len - primary->current_datain_offset;
|
remaining_size = primary->scsi.transfer_len - primary->current_data_offset;
|
||||||
|
|
||||||
subtask = ut_conn_task_get(primary);
|
subtask = ut_conn_task_get(primary);
|
||||||
|
|
||||||
subtask->scsi.offset = primary->current_datain_offset;
|
subtask->scsi.offset = primary->current_data_offset;
|
||||||
subtask->scsi.length = spdk_min(SPDK_BDEV_LARGE_BUF_MAX_SIZE, remaining_size);
|
subtask->scsi.length = spdk_min(SPDK_BDEV_LARGE_BUF_MAX_SIZE, remaining_size);
|
||||||
subtask->scsi.status = SPDK_SCSI_STATUS_GOOD;
|
subtask->scsi.status = SPDK_SCSI_STATUS_GOOD;
|
||||||
|
|
||||||
primary->current_datain_offset += subtask->scsi.length;
|
primary->current_data_offset += subtask->scsi.length;
|
||||||
|
|
||||||
TAILQ_INSERT_TAIL(&g_ut_read_tasks, subtask, link);
|
TAILQ_INSERT_TAIL(&g_ut_read_tasks, subtask, link);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (primary->current_datain_offset == primary->scsi.transfer_len) {
|
if (primary->current_data_offset == primary->scsi.transfer_len) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -316,7 +316,7 @@ read_task_split_in_order_case(void)
|
|||||||
|
|
||||||
primary.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8;
|
primary.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8;
|
||||||
TAILQ_INIT(&primary.subtask_list);
|
TAILQ_INIT(&primary.subtask_list);
|
||||||
primary.current_datain_offset = 0;
|
primary.current_data_offset = 0;
|
||||||
primary.bytes_completed = 0;
|
primary.bytes_completed = 0;
|
||||||
primary.scsi.ref = 1;
|
primary.scsi.ref = 1;
|
||||||
|
|
||||||
@ -352,7 +352,7 @@ read_task_split_reverse_order_case(void)
|
|||||||
|
|
||||||
primary.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8;
|
primary.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8;
|
||||||
TAILQ_INIT(&primary.subtask_list);
|
TAILQ_INIT(&primary.subtask_list);
|
||||||
primary.current_datain_offset = 0;
|
primary.current_data_offset = 0;
|
||||||
primary.bytes_completed = 0;
|
primary.bytes_completed = 0;
|
||||||
primary.scsi.ref = 1;
|
primary.scsi.ref = 1;
|
||||||
|
|
||||||
@ -756,7 +756,7 @@ abort_queued_datain_task_test(void)
|
|||||||
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
|
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
CU_ASSERT(TAILQ_EMPTY(&conn.queued_datain_tasks));
|
CU_ASSERT(TAILQ_EMPTY(&conn.queued_datain_tasks));
|
||||||
CU_ASSERT(task.current_datain_offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
CU_ASSERT(task.current_data_offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
||||||
CU_ASSERT(task.scsi.ref == 0);
|
CU_ASSERT(task.scsi.ref == 0);
|
||||||
CU_ASSERT(subtask.scsi.offset == 0);
|
CU_ASSERT(subtask.scsi.offset == 0);
|
||||||
CU_ASSERT(subtask.scsi.length == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
CU_ASSERT(subtask.scsi.length == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
||||||
@ -765,7 +765,7 @@ abort_queued_datain_task_test(void)
|
|||||||
/* Case2: Queue one task, and this task is partially executed */
|
/* Case2: Queue one task, and this task is partially executed */
|
||||||
task.scsi.ref = 1;
|
task.scsi.ref = 1;
|
||||||
task.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3;
|
task.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3;
|
||||||
task.current_datain_offset = SPDK_BDEV_LARGE_BUF_MAX_SIZE;
|
task.current_data_offset = SPDK_BDEV_LARGE_BUF_MAX_SIZE;
|
||||||
TAILQ_INSERT_TAIL(&conn.queued_datain_tasks, &task, link);
|
TAILQ_INSERT_TAIL(&conn.queued_datain_tasks, &task, link);
|
||||||
|
|
||||||
/* No slots for sub read tasks */
|
/* No slots for sub read tasks */
|
||||||
@ -778,7 +778,7 @@ abort_queued_datain_task_test(void)
|
|||||||
conn.data_in_cnt = 0;
|
conn.data_in_cnt = 0;
|
||||||
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
|
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
|
||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
CU_ASSERT(task.current_datain_offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
CU_ASSERT(task.current_data_offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE * 3);
|
||||||
CU_ASSERT(task.scsi.ref == 2);
|
CU_ASSERT(task.scsi.ref == 2);
|
||||||
CU_ASSERT(TAILQ_FIRST(&task.subtask_list) == &subtask);
|
CU_ASSERT(TAILQ_FIRST(&task.subtask_list) == &subtask);
|
||||||
CU_ASSERT(subtask.scsi.offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE);
|
CU_ASSERT(subtask.scsi.offset == SPDK_BDEV_LARGE_BUF_MAX_SIZE);
|
||||||
@ -830,7 +830,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu1.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu1.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task1.scsi.ref = 1;
|
task1.scsi.ref = 1;
|
||||||
task1.current_datain_offset = 0;
|
task1.current_data_offset = 0;
|
||||||
task1.scsi.transfer_len = 512;
|
task1.scsi.transfer_len = 512;
|
||||||
task1.scsi.lun = &lun1;
|
task1.scsi.lun = &lun1;
|
||||||
iscsi_task_set_pdu(&task1, &pdu1);
|
iscsi_task_set_pdu(&task1, &pdu1);
|
||||||
@ -841,7 +841,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu2.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu2.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task2.scsi.ref = 1;
|
task2.scsi.ref = 1;
|
||||||
task2.current_datain_offset = 0;
|
task2.current_data_offset = 0;
|
||||||
task2.scsi.transfer_len = 512;
|
task2.scsi.transfer_len = 512;
|
||||||
task2.scsi.lun = &lun2;
|
task2.scsi.lun = &lun2;
|
||||||
iscsi_task_set_pdu(&task2, &pdu2);
|
iscsi_task_set_pdu(&task2, &pdu2);
|
||||||
@ -855,7 +855,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu3.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu3.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task3.scsi.ref = 1;
|
task3.scsi.ref = 1;
|
||||||
task3.current_datain_offset = 0;
|
task3.current_data_offset = 0;
|
||||||
task3.scsi.transfer_len = 512;
|
task3.scsi.transfer_len = 512;
|
||||||
task3.scsi.lun = &lun1;
|
task3.scsi.lun = &lun1;
|
||||||
iscsi_task_set_pdu(&task3, &pdu3);
|
iscsi_task_set_pdu(&task3, &pdu3);
|
||||||
@ -866,7 +866,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu4.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu4.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task4.scsi.ref = 1;
|
task4.scsi.ref = 1;
|
||||||
task4.current_datain_offset = 0;
|
task4.current_data_offset = 0;
|
||||||
task4.scsi.transfer_len = 512;
|
task4.scsi.transfer_len = 512;
|
||||||
task4.scsi.lun = &lun2;
|
task4.scsi.lun = &lun2;
|
||||||
iscsi_task_set_pdu(&task4, &pdu4);
|
iscsi_task_set_pdu(&task4, &pdu4);
|
||||||
@ -877,7 +877,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu5.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu5.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task5.scsi.ref = 1;
|
task5.scsi.ref = 1;
|
||||||
task5.current_datain_offset = 0;
|
task5.current_data_offset = 0;
|
||||||
task5.scsi.transfer_len = 512;
|
task5.scsi.transfer_len = 512;
|
||||||
task5.scsi.lun = &lun1;
|
task5.scsi.lun = &lun1;
|
||||||
iscsi_task_set_pdu(&task5, &pdu5);
|
iscsi_task_set_pdu(&task5, &pdu5);
|
||||||
@ -891,7 +891,7 @@ abort_queued_datain_tasks_test(void)
|
|||||||
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu6.bhs;
|
scsi_req = (struct iscsi_bhs_scsi_req *)&pdu6.bhs;
|
||||||
scsi_req->read_bit = 1;
|
scsi_req->read_bit = 1;
|
||||||
task6.scsi.ref = 1;
|
task6.scsi.ref = 1;
|
||||||
task6.current_datain_offset = 0;
|
task6.current_data_offset = 0;
|
||||||
task6.scsi.transfer_len = 512;
|
task6.scsi.transfer_len = 512;
|
||||||
task6.scsi.lun = &lun2;
|
task6.scsi.lun = &lun2;
|
||||||
iscsi_task_set_pdu(&task6, &pdu6);
|
iscsi_task_set_pdu(&task6, &pdu6);
|
||||||
|
Loading…
Reference in New Issue
Block a user