From 2144f0b4c30fb0a7a1b82b38a80e8bf598786605 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 14 Apr 2020 01:41:30 +0900 Subject: [PATCH] lib/scsi: Separate pending task and outstanding (submitted) task into different functions This is a preparation to the following patches to optimize task submission and remove the spdk_prefix from internal or private functions. To avoid using double underscores as the prefix of the function name, separate pending task check and outstanding task check into different functions. Signed-off-by: Shuhei Matsumoto Change-Id: Ieda54507bf4c781b60fa05d03cd32ca25948e430 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1826 Tested-by: SPDK CI Jenkins Reviewed-by: Changpeng Liu Reviewed-by: Jim Harris --- lib/scsi/lun.c | 20 ++++++++++---------- test/unit/lib/scsi/lun.c/lun_ut.c | 5 +++-- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index fd352cc18..c8b563f3f 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -64,8 +64,7 @@ scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *ta static bool scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun) { - return !TAILQ_EMPTY(&lun->pending_mgmt_tasks) || - !TAILQ_EMPTY(&lun->mgmt_tasks); + return !TAILQ_EMPTY(&lun->pending_mgmt_tasks); } static bool @@ -74,16 +73,14 @@ scsi_lun_has_outstanding_mgmt_tasks(const struct spdk_scsi_lun *lun) return !TAILQ_EMPTY(&lun->mgmt_tasks); } -/* This check includes both pending and submitted (outstanding) tasks. */ static bool scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun) { - return !TAILQ_EMPTY(&lun->pending_tasks) || - !TAILQ_EMPTY(&lun->tasks); + return !TAILQ_EMPTY(&lun->pending_tasks); } static bool -scsi_lun_has_outstanding_tasks(struct spdk_scsi_lun *lun) +scsi_lun_has_outstanding_tasks(const struct spdk_scsi_lun *lun) { return !TAILQ_EMPTY(&lun->tasks); } @@ -242,7 +239,8 @@ scsi_lun_execute_tasks(struct spdk_scsi_lun *lun) void spdk_scsi_lun_execute_tasks(struct spdk_scsi_lun *lun) { - if (scsi_lun_has_pending_mgmt_tasks(lun)) { + if (scsi_lun_has_pending_mgmt_tasks(lun) || + scsi_lun_has_outstanding_mgmt_tasks(lun)) { /* Pending IO tasks will wait for completion of existing mgmt tasks. */ return; @@ -550,7 +548,8 @@ spdk_scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun, struct spdk_scsi_task *task; if (initiator_port == NULL) { - return scsi_lun_has_pending_mgmt_tasks(lun); + return scsi_lun_has_pending_mgmt_tasks(lun) || + scsi_lun_has_outstanding_mgmt_tasks(lun); } TAILQ_FOREACH(task, &lun->pending_mgmt_tasks, scsi_link) { @@ -567,7 +566,7 @@ spdk_scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun, return false; } - +/* This check includes both pending and submitted (outstanding) tasks. */ bool spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun, const struct spdk_scsi_port *initiator_port) @@ -575,7 +574,8 @@ spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun, struct spdk_scsi_task *task; if (initiator_port == NULL) { - return scsi_lun_has_pending_tasks(lun); + return scsi_lun_has_pending_tasks(lun) || + scsi_lun_has_outstanding_tasks(lun); } TAILQ_FOREACH(task, &lun->pending_tasks, scsi_link) { diff --git a/test/unit/lib/scsi/lun.c/lun_ut.c b/test/unit/lib/scsi/lun.c/lun_ut.c index 51ff2abdc..f175f31bc 100644 --- a/test/unit/lib/scsi/lun.c/lun_ut.c +++ b/test/unit/lib/scsi/lun.c/lun_ut.c @@ -615,7 +615,7 @@ lun_check_pending_tasks_only_for_specific_initiator(void) TAILQ_INSERT_TAIL(&lun->tasks, &task1, scsi_link); TAILQ_INSERT_TAIL(&lun->tasks, &task2, scsi_link); CU_ASSERT(scsi_lun_has_outstanding_tasks(lun) == true); - CU_ASSERT(scsi_lun_has_pending_tasks(lun) == true); + CU_ASSERT(scsi_lun_has_pending_tasks(lun) == false); CU_ASSERT(spdk_scsi_lun_has_pending_tasks(lun, NULL) == true); CU_ASSERT(spdk_scsi_lun_has_pending_tasks(lun, &initiator_port1) == true); CU_ASSERT(spdk_scsi_lun_has_pending_tasks(lun, &initiator_port2) == true); @@ -640,7 +640,8 @@ lun_check_pending_tasks_only_for_specific_initiator(void) TAILQ_INSERT_TAIL(&lun->mgmt_tasks, &task1, scsi_link); TAILQ_INSERT_TAIL(&lun->mgmt_tasks, &task2, scsi_link); - CU_ASSERT(scsi_lun_has_pending_mgmt_tasks(lun) == true); + CU_ASSERT(scsi_lun_has_outstanding_mgmt_tasks(lun) == true); + CU_ASSERT(scsi_lun_has_pending_mgmt_tasks(lun) == false); CU_ASSERT(spdk_scsi_lun_has_pending_mgmt_tasks(lun, NULL) == true); CU_ASSERT(spdk_scsi_lun_has_pending_mgmt_tasks(lun, &initiator_port1) == true); CU_ASSERT(spdk_scsi_lun_has_pending_mgmt_tasks(lun, &initiator_port2) == true);