Commit deb90a93 authored by Ziye Yang's avatar Ziye Yang Committed by Daniel Verkamp
Browse files

SPDK: add nvme_remove_child_request helper function



This patch is used to add a nvme_request remove child
helpler function

Change-Id: I1e5bb228d53333ca3601f4ae30fcd801ea39e532
Signed-off-by: default avatarZiye Yang <ziye.yang@intel.com>
parent 4e91a0b0
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -146,6 +146,14 @@ nvme_allocate_request_null(spdk_nvme_cmd_cb cb_fn, void *cb_arg)
	return nvme_allocate_request_contig(NULL, 0, cb_fn, cb_arg);
}

void
nvme_remove_child_request(struct nvme_request *parent,
			  struct nvme_request *child)
{
	parent->num_children--;
	TAILQ_REMOVE(&parent->children, child, child_tailq);
}

void
nvme_free_request(struct nvme_request *req)
{
+1 −0
Original line number Diff line number Diff line
@@ -549,6 +549,7 @@ struct nvme_request *nvme_allocate_request_null(spdk_nvme_cmd_cb cb_fn, void *cb
struct nvme_request *nvme_allocate_request_contig(void *buffer, uint32_t payload_size,
		spdk_nvme_cmd_cb cb_fn, void *cb_arg);
void	nvme_free_request(struct nvme_request *req);
void	nvme_remove_child_request(struct nvme_request *parent, struct nvme_request *child);
bool	nvme_intel_has_quirk(struct pci_id *id, uint64_t quirk);

void	spdk_nvme_ctrlr_opts_set_defaults(struct spdk_nvme_ctrlr_opts *opts);
+1 −2
Original line number Diff line number Diff line
@@ -44,8 +44,7 @@ nvme_cb_complete_child(void *child_arg, const struct spdk_nvme_cpl *cpl)
	struct nvme_request *child = child_arg;
	struct nvme_request *parent = child->parent;

	parent->num_children--;
	TAILQ_REMOVE(&parent->children, child, child_tailq);
	nvme_remove_child_request(parent, child);

	if (spdk_nvme_cpl_is_error(cpl)) {
		memcpy(&parent->parent_status, cpl, sizeof(*cpl));
+12 −12
Original line number Diff line number Diff line
@@ -191,7 +191,7 @@ split_test2(void)
	CU_ASSERT(g_request->num_children == 2);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 128 * 1024);
@@ -200,7 +200,7 @@ split_test2(void)
	nvme_free_request(child);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 128 * 1024);
@@ -247,7 +247,7 @@ split_test3(void)
	SPDK_CU_ASSERT_FATAL(g_request->num_children == 2);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 128 * 1024);
@@ -256,7 +256,7 @@ split_test3(void)
	nvme_free_request(child);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 128 * 1024);
@@ -306,7 +306,7 @@ split_test4(void)
	SPDK_CU_ASSERT_FATAL(g_request->num_children == 3);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == (256 - 10) * 512);
@@ -318,7 +318,7 @@ split_test4(void)
	nvme_free_request(child);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 128 * 1024);
@@ -330,7 +330,7 @@ split_test4(void)
	nvme_free_request(child);

	child = TAILQ_FIRST(&g_request->children);
	TAILQ_REMOVE(&g_request->children, child, child_tailq);
	nvme_remove_child_request(g_request, child);
	nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
	CU_ASSERT(child->num_children == 0);
	CU_ASSERT(child->payload_size == 10 * 512);
@@ -355,10 +355,10 @@ test_cmd_child_request(void)
	struct spdk_nvme_ctrlr		ctrlr;
	struct spdk_nvme_qpair		qpair;
	int				rc = 0;
	struct nvme_request		*child;
	struct nvme_request		*child, *tmp;
	void				*payload;
	uint64_t			lba = 0x1000;
	uint32_t			i;
	uint32_t			i = 0;
	uint32_t			offset = 0;
	uint32_t			sector_size = 512;
	uint32_t			max_io_size = 128 * 1024;
@@ -383,9 +383,8 @@ test_cmd_child_request(void)
	CU_ASSERT(rc == 0);
	CU_ASSERT(g_request->num_children == 4);

	for (i = 0; i < g_request->num_children; i++) {
		child = TAILQ_FIRST(&g_request->children);
		TAILQ_REMOVE(&g_request->children, child, child_tailq);
	TAILQ_FOREACH_SAFE(child, &g_request->children, child_tailq, tmp) {
		nvme_remove_child_request(g_request, child);
		CU_ASSERT(child->payload_offset == offset);
		CU_ASSERT(child->cmd.opc == SPDK_NVME_OPC_READ);
		CU_ASSERT(child->cmd.nsid == ns.id);
@@ -393,6 +392,7 @@ test_cmd_child_request(void)
		CU_ASSERT(child->cmd.cdw12 == ((sectors_per_max_io - 1) | 0));
		offset += max_io_size;
		nvme_free_request(child);
		i++;
	}

	free(payload);
+8 −0
Original line number Diff line number Diff line
@@ -176,6 +176,14 @@ nvme_free_request(struct nvme_request *req)
	nvme_dealloc_request(req);
}

void
nvme_remove_child_request(struct nvme_request *parent,
			  struct nvme_request *child)
{
	parent->num_children--;
	TAILQ_REMOVE(&parent->children, child, child_tailq);
}

static void
test1(void)
{