Example #1
0
static void
nvmf_test_check_admin_completions(void)
{
	struct nvmf_session *sess;
	struct spdk_nvmf_subsystem *subsystem;
	struct spdk_nvme_ctrlr ctrlr1, ctrlr2;
	int i;

	ctrlr1.a = 1;
	ctrlr2.a = 2;
	sess = nvmf_find_session_by_id("subsystem1", SS_SC_CNTLID);
	subsystem = nvmf_find_subsystem("subsystem1");
	/* preload ns_list_map */
#define PRELOAD_NS_LIST(index, nvme_ctrlr, ns_id) \
	do { \
		subsystem->ns_list_map[index].ctrlr = nvme_ctrlr; \
		subsystem->ns_list_map[index].ns = NULL; \
		subsystem->ns_list_map[index].nvme_ns_id = ns_id; \
		 \
	} while (0)

	for (i = 0; i < MAX_PER_SUBSYSTEM_NAMESPACES; i++) {
		PRELOAD_NS_LIST(i, NULL, 0);
	}
	PRELOAD_NS_LIST(0, &ctrlr1, 1);
	PRELOAD_NS_LIST(1, &ctrlr1, 2);
	PRELOAD_NS_LIST(2, &ctrlr1, 3);
	PRELOAD_NS_LIST(3, NULL, 1);
	PRELOAD_NS_LIST(4, &ctrlr1, 4);
	PRELOAD_NS_LIST(5, &ctrlr2, 1);
	PRELOAD_NS_LIST(6, &ctrlr2, 2);
	PRELOAD_NS_LIST(7, NULL, 2);
	PRELOAD_NS_LIST(8, NULL, 3);
	PRELOAD_NS_LIST(9, &ctrlr1, 5);
#undef PRELOAD_NS_LIST
	/* make sure the check completion is done by
	 * ctrlr1,ctrlr2,ctrlr1
	 */
	controller_checked[0] = -1;
	nvmf_check_admin_completions(sess);
	CU_ASSERT_EQUAL(controller_checked[0], 1);
	CU_ASSERT_EQUAL(controller_checked[1], 2);
	CU_ASSERT_EQUAL(controller_checked[2], 1);
	CU_ASSERT_EQUAL(controller_checked[3], -1);
}
Example #2
0
static int nvmf_execute_conn(struct spdk_nvmf_conn *conn)
{
	int		rc = 0;

	/* for an active session, process any pending NVMf completions */
	if (conn->sess) {
		if (conn->type == CONN_TYPE_AQ)
			nvmf_check_admin_completions(conn->sess);
		else
			nvmf_check_io_completions(conn->sess);
	}

	/* process all pending completions */
	rc = nvmf_cq_event_handler(conn);
	if (rc > 0) {
		SPDK_TRACELOG(SPDK_TRACE_RDMA, "CQ event handler, %d CQ completions\n", rc);
	} else if (rc < 0) {
		SPDK_ERRLOG("CQ event handler error!\n");
		return -1;
	}

	return 0;
}