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: Ziye Yang <ziye.yang@intel.com>
This commit is contained in:
Ziye Yang 2016-03-31 09:56:40 +08:00 committed by Daniel Verkamp
parent 4e91a0b017
commit deb90a93de
5 changed files with 30 additions and 14 deletions

View File

@ -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)
{

View File

@ -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);

View File

@ -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));

View File

@ -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);

View File

@ -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)
{