From 4787395283fd050b24e91559955599ac9149a987 Mon Sep 17 00:00:00 2001 From: Shuhei Matsumoto Date: Tue, 15 Oct 2019 16:05:36 +0900 Subject: [PATCH] lib/scsi: Change current function to check pending tasks to private When closing iSCSI connection, if we check pending tasks, we must check tasks only from the corresponding initiator. We have to add new API to do that. On the other hand, during IO submission or LUN hotplug, we must check all tasks. The latter case is done only in SCSI LUN, and the function is not necessary to be public. As a preparation, change scsi_lun_has_pending_tasks/_mgmt_tasks from public to private. Signed-off-by: Shuhei Matsumoto Change-Id: I2d7d77109ed317435b6768fffb0bf4e21dd60f9f Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/471335 Tested-by: SPDK CI Jenkins Reviewed-by: Jim Harris Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu --- lib/scsi/lun.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/lib/scsi/lun.c b/lib/scsi/lun.c index c84fdb63b..382db49a1 100644 --- a/lib/scsi/lun.c +++ b/lib/scsi/lun.c @@ -61,6 +61,21 @@ scsi_lun_complete_mgmt_task(struct spdk_scsi_lun *lun, struct spdk_scsi_task *ta spdk_scsi_lun_execute_mgmt_task(lun); } +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); +} + +/* 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); +} + static bool scsi_lun_has_outstanding_tasks(struct spdk_scsi_lun *lun) { @@ -206,7 +221,7 @@ spdk_scsi_lun_execute_tasks(struct spdk_scsi_lun *lun) { struct spdk_scsi_task *task, *task_tmp; - if (spdk_scsi_lun_has_pending_mgmt_tasks(lun)) { + if (scsi_lun_has_pending_mgmt_tasks(lun)) { /* Pending IO tasks will wait for completion of existing mgmt tasks. */ return; @@ -277,8 +292,8 @@ scsi_lun_check_pending_tasks(void *arg) { struct spdk_scsi_lun *lun = (struct spdk_scsi_lun *)arg; - if (spdk_scsi_lun_has_pending_tasks(lun) || - spdk_scsi_lun_has_pending_mgmt_tasks(lun)) { + if (scsi_lun_has_pending_tasks(lun) || + scsi_lun_has_pending_mgmt_tasks(lun)) { return -1; } spdk_poller_unregister(&lun->hotremove_poller); @@ -292,8 +307,8 @@ _scsi_lun_hot_remove(void *arg1) { struct spdk_scsi_lun *lun = arg1; - if (spdk_scsi_lun_has_pending_tasks(lun) || - spdk_scsi_lun_has_pending_mgmt_tasks(lun)) { + if (scsi_lun_has_pending_tasks(lun) || + scsi_lun_has_pending_mgmt_tasks(lun)) { lun->hotremove_poller = spdk_poller_register(scsi_lun_check_pending_tasks, lun, 10); } else { @@ -491,16 +506,13 @@ spdk_scsi_lun_get_dev(const struct spdk_scsi_lun *lun) bool spdk_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 scsi_lun_has_pending_mgmt_tasks(lun); } -/* This check includes both pending and submitted (outstanding) tasks. */ bool spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun) { - return !TAILQ_EMPTY(&lun->pending_tasks) || - !TAILQ_EMPTY(&lun->tasks); + return scsi_lun_has_pending_tasks(lun); } bool