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 <shuhei.matsumoto.xt@hitachi.com>
Change-Id: Ieda54507bf4c781b60fa05d03cd32ca25948e430
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1826
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Shuhei Matsumoto 2020-04-14 01:41:30 +09:00 committed by Tomasz Zawadzki
parent 30e42bcecf
commit 2144f0b4c3
2 changed files with 13 additions and 12 deletions

View File

@ -64,8 +64,7 @@ scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *ta
static bool static bool
scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun) scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun)
{ {
return !TAILQ_EMPTY(&lun->pending_mgmt_tasks) || return !TAILQ_EMPTY(&lun->pending_mgmt_tasks);
!TAILQ_EMPTY(&lun->mgmt_tasks);
} }
static bool static bool
@ -74,16 +73,14 @@ scsi_lun_has_outstanding_mgmt_tasks(const struct spdk_scsi_lun *lun)
return !TAILQ_EMPTY(&lun->mgmt_tasks); return !TAILQ_EMPTY(&lun->mgmt_tasks);
} }
/* This check includes both pending and submitted (outstanding) tasks. */
static bool static bool
scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun) scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun)
{ {
return !TAILQ_EMPTY(&lun->pending_tasks) || return !TAILQ_EMPTY(&lun->pending_tasks);
!TAILQ_EMPTY(&lun->tasks);
} }
static bool 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); return !TAILQ_EMPTY(&lun->tasks);
} }
@ -242,7 +239,8 @@ scsi_lun_execute_tasks(struct spdk_scsi_lun *lun)
void void
spdk_scsi_lun_execute_tasks(struct spdk_scsi_lun *lun) 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. /* Pending IO tasks will wait for completion of existing mgmt tasks.
*/ */
return; return;
@ -550,7 +548,8 @@ spdk_scsi_lun_has_pending_mgmt_tasks(const struct spdk_scsi_lun *lun,
struct spdk_scsi_task *task; struct spdk_scsi_task *task;
if (initiator_port == NULL) { 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) { 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; return false;
} }
/* This check includes both pending and submitted (outstanding) tasks. */
bool bool
spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun, spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun,
const struct spdk_scsi_port *initiator_port) 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; struct spdk_scsi_task *task;
if (initiator_port == NULL) { 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) { TAILQ_FOREACH(task, &lun->pending_tasks, scsi_link) {

View File

@ -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, &task1, scsi_link);
TAILQ_INSERT_TAIL(&lun->tasks, &task2, scsi_link); TAILQ_INSERT_TAIL(&lun->tasks, &task2, scsi_link);
CU_ASSERT(scsi_lun_has_outstanding_tasks(lun) == true); 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, NULL) == true);
CU_ASSERT(spdk_scsi_lun_has_pending_tasks(lun, &initiator_port1) == 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); 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, &task1, scsi_link);
TAILQ_INSERT_TAIL(&lun->mgmt_tasks, &task2, 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, 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_port1) == true);
CU_ASSERT(spdk_scsi_lun_has_pending_mgmt_tasks(lun, &initiator_port2) == true); CU_ASSERT(spdk_scsi_lun_has_pending_mgmt_tasks(lun, &initiator_port2) == true);