Commit 57f9221f authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Daniel Verkamp
Browse files

scsi: added spdk_scsi_dev_has_pending_tasks()



Added new function in preparation to implementing device hotremove.

Change-Id: I5b85f76f543b882acf3b0fe40c9e92125594b257
Signed-off-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/366725


Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent 870ce250
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -168,6 +168,7 @@ const char *spdk_scsi_dev_get_name(const struct spdk_scsi_dev *dev);
int spdk_scsi_dev_get_id(const struct spdk_scsi_dev *dev);
int spdk_scsi_dev_get_max_lun(const struct spdk_scsi_dev *dev);
struct spdk_scsi_lun *spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id);
bool spdk_scsi_dev_has_pending_tasks(const struct spdk_scsi_dev *dev);
void spdk_scsi_dev_destruct(struct spdk_scsi_dev *dev);
void spdk_scsi_dev_queue_mgmt_task(struct spdk_scsi_dev *dev, struct spdk_scsi_task *task,
				   enum spdk_scsi_task_func func);
+14 −0
Original line number Diff line number Diff line
@@ -337,3 +337,17 @@ spdk_scsi_dev_get_lun(struct spdk_scsi_dev *dev, int lun_id)

	return dev->lun[lun_id];
}

bool
spdk_scsi_dev_has_pending_tasks(const struct spdk_scsi_dev *dev)
{
	int i;

	for (i = 0; i < dev->maxlun; ++i) {
		if (dev->lun[i] && spdk_scsi_lun_has_pending_tasks(dev->lun[i])) {
			return true;
		}
	}

	return false;
}
+7 −1
Original line number Diff line number Diff line
@@ -226,7 +226,7 @@ spdk_scsi_lun_hotplug(void *arg)
{
	struct spdk_scsi_lun *lun = (struct spdk_scsi_lun *)arg;

	if (TAILQ_EMPTY(&lun->pending_tasks) && TAILQ_EMPTY(&lun->tasks)) {
	if (!spdk_scsi_lun_has_pending_tasks(lun)) {
		spdk_scsi_lun_free_io_channel(lun);
		spdk_scsi_lun_delete(lun->name);
	}
@@ -416,3 +416,9 @@ spdk_scsi_lun_get_dev(const struct spdk_scsi_lun *lun)
{
	return lun->dev;
}

bool
spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun)
{
	return !TAILQ_EMPTY(&lun->pending_tasks) || !TAILQ_EMPTY(&lun->tasks);
}
+1 −0
Original line number Diff line number Diff line
@@ -146,6 +146,7 @@ int spdk_scsi_lun_unclaim(struct spdk_scsi_lun *lun);
int spdk_scsi_lun_delete(const char *lun_name);
int spdk_scsi_lun_allocate_io_channel(struct spdk_scsi_lun *lun);
void spdk_scsi_lun_free_io_channel(struct spdk_scsi_lun *lun);
bool spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun);

int spdk_scsi_lun_db_add(struct spdk_scsi_lun *lun);
int spdk_scsi_lun_db_delete(struct spdk_scsi_lun *lun);
+5 −0
Original line number Diff line number Diff line
@@ -177,6 +177,11 @@ spdk_scsi_lun_free_io_channel(struct spdk_scsi_lun *lun)
{
}

bool
spdk_scsi_lun_has_pending_tasks(const struct spdk_scsi_lun *lun)
{
	return false;
}

static void
dev_destruct_null_dev(void)