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:
Shuhei Matsumoto 2021-02-16 12:06:20 +09:00 committed by Tomasz Zawadzki
parent 00508c8ef1
commit 6d573781b5
4 changed files with 33 additions and 33 deletions

View File

@ -964,16 +964,16 @@ _iscsi_conn_abort_queued_datain_task(struct spdk_iscsi_conn *conn,
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. */
if (task->current_datain_offset < task->scsi.transfer_len) {
remaining_size = task->scsi.transfer_len - task->current_datain_offset;
if (task->current_data_offset < task->scsi.transfer_len) {
remaining_size = task->scsi.transfer_len - task->current_data_offset;
subtask = iscsi_task_get(conn, task, iscsi_task_cpl);
assert(subtask != NULL);
subtask->scsi.offset = task->current_datain_offset;
subtask->scsi.offset = task->current_data_offset;
subtask->scsi.length = remaining_size;
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;
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
* 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);
return 0;
}
@ -1034,22 +1034,22 @@ iscsi_conn_handle_queued_datain_tasks(struct spdk_iscsi_conn *conn)
while (!TAILQ_EMPTY(&conn->queued_datain_tasks) &&
conn->data_in_cnt < g_iscsi.MaxLargeDataInPerConnection) {
task = TAILQ_FIRST(&conn->queued_datain_tasks);
assert(task->current_datain_offset <= task->scsi.transfer_len);
if (task->current_datain_offset < task->scsi.transfer_len) {
assert(task->current_data_offset <= task->scsi.transfer_len);
if (task->current_data_offset < task->scsi.transfer_len) {
struct spdk_iscsi_task *subtask;
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);
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);
if (spdk_scsi_dev_get_lun(conn->dev, task->lun_id) == NULL) {
/* Stop submitting split read I/Os for remaining data. */
TAILQ_REMOVE(&conn->queued_datain_tasks, task, link);
task->current_datain_offset += remaining_size;
assert(task->current_datain_offset == task->scsi.transfer_len);
task->current_data_offset += remaining_size;
assert(task->current_data_offset == task->scsi.transfer_len);
subtask->scsi.transfer_len = remaining_size;
spdk_scsi_task_process_null_lun(&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);
task->current_datain_offset += subtask->scsi.length;
task->current_data_offset += subtask->scsi.length;
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);
}
}

View File

@ -3252,7 +3252,7 @@ iscsi_pdu_payload_op_scsi_read(struct spdk_iscsi_conn *conn, struct spdk_iscsi_t
return 0;
} else {
TAILQ_INIT(&task->subtask_list);
task->current_datain_offset = 0;
task->current_data_offset = 0;
TAILQ_INSERT_TAIL(&conn->queued_datain_tasks, task, link);
return iscsi_conn_handle_queued_datain_tasks(conn);

View File

@ -56,9 +56,9 @@ struct spdk_iscsi_task {
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

View File

@ -283,21 +283,21 @@ ut_conn_create_read_tasks(struct spdk_iscsi_task *primary)
uint32_t remaining_size = 0;
while (1) {
if (primary->current_datain_offset < primary->scsi.transfer_len) {
remaining_size = primary->scsi.transfer_len - primary->current_datain_offset;
if (primary->current_data_offset < primary->scsi.transfer_len) {
remaining_size = primary->scsi.transfer_len - primary->current_data_offset;
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.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);
}
if (primary->current_datain_offset == primary->scsi.transfer_len) {
if (primary->current_data_offset == primary->scsi.transfer_len) {
break;
}
}
@ -316,7 +316,7 @@ read_task_split_in_order_case(void)
primary.scsi.transfer_len = SPDK_BDEV_LARGE_BUF_MAX_SIZE * 8;
TAILQ_INIT(&primary.subtask_list);
primary.current_datain_offset = 0;
primary.current_data_offset = 0;
primary.bytes_completed = 0;
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;
TAILQ_INIT(&primary.subtask_list);
primary.current_datain_offset = 0;
primary.current_data_offset = 0;
primary.bytes_completed = 0;
primary.scsi.ref = 1;
@ -756,7 +756,7 @@ abort_queued_datain_task_test(void)
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
CU_ASSERT(rc == 0);
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(subtask.scsi.offset == 0);
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 */
task.scsi.ref = 1;
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);
/* No slots for sub read tasks */
@ -778,7 +778,7 @@ abort_queued_datain_task_test(void)
conn.data_in_cnt = 0;
rc = _iscsi_conn_abort_queued_datain_task(&conn, &task);
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(TAILQ_FIRST(&task.subtask_list) == &subtask);
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->read_bit = 1;
task1.scsi.ref = 1;
task1.current_datain_offset = 0;
task1.current_data_offset = 0;
task1.scsi.transfer_len = 512;
task1.scsi.lun = &lun1;
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->read_bit = 1;
task2.scsi.ref = 1;
task2.current_datain_offset = 0;
task2.current_data_offset = 0;
task2.scsi.transfer_len = 512;
task2.scsi.lun = &lun2;
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->read_bit = 1;
task3.scsi.ref = 1;
task3.current_datain_offset = 0;
task3.current_data_offset = 0;
task3.scsi.transfer_len = 512;
task3.scsi.lun = &lun1;
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->read_bit = 1;
task4.scsi.ref = 1;
task4.current_datain_offset = 0;
task4.current_data_offset = 0;
task4.scsi.transfer_len = 512;
task4.scsi.lun = &lun2;
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->read_bit = 1;
task5.scsi.ref = 1;
task5.current_datain_offset = 0;
task5.current_data_offset = 0;
task5.scsi.transfer_len = 512;
task5.scsi.lun = &lun1;
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->read_bit = 1;
task6.scsi.ref = 1;
task6.current_datain_offset = 0;
task6.current_data_offset = 0;
task6.scsi.transfer_len = 512;
task6.scsi.lun = &lun2;
iscsi_task_set_pdu(&task6, &pdu6);