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:
parent
4e91a0b017
commit
deb90a93de
@ -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);
|
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
|
void
|
||||||
nvme_free_request(struct nvme_request *req)
|
nvme_free_request(struct nvme_request *req)
|
||||||
{
|
{
|
||||||
|
@ -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,
|
struct nvme_request *nvme_allocate_request_contig(void *buffer, uint32_t payload_size,
|
||||||
spdk_nvme_cmd_cb cb_fn, void *cb_arg);
|
spdk_nvme_cmd_cb cb_fn, void *cb_arg);
|
||||||
void nvme_free_request(struct nvme_request *req);
|
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);
|
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);
|
void spdk_nvme_ctrlr_opts_set_defaults(struct spdk_nvme_ctrlr_opts *opts);
|
||||||
|
@ -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 *child = child_arg;
|
||||||
struct nvme_request *parent = child->parent;
|
struct nvme_request *parent = child->parent;
|
||||||
|
|
||||||
parent->num_children--;
|
nvme_remove_child_request(parent, child);
|
||||||
TAILQ_REMOVE(&parent->children, child, child_tailq);
|
|
||||||
|
|
||||||
if (spdk_nvme_cpl_is_error(cpl)) {
|
if (spdk_nvme_cpl_is_error(cpl)) {
|
||||||
memcpy(&parent->parent_status, cpl, sizeof(*cpl));
|
memcpy(&parent->parent_status, cpl, sizeof(*cpl));
|
||||||
|
@ -191,7 +191,7 @@ split_test2(void)
|
|||||||
CU_ASSERT(g_request->num_children == 2);
|
CU_ASSERT(g_request->num_children == 2);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 128 * 1024);
|
CU_ASSERT(child->payload_size == 128 * 1024);
|
||||||
@ -200,7 +200,7 @@ split_test2(void)
|
|||||||
nvme_free_request(child);
|
nvme_free_request(child);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 128 * 1024);
|
CU_ASSERT(child->payload_size == 128 * 1024);
|
||||||
@ -247,7 +247,7 @@ split_test3(void)
|
|||||||
SPDK_CU_ASSERT_FATAL(g_request->num_children == 2);
|
SPDK_CU_ASSERT_FATAL(g_request->num_children == 2);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 128 * 1024);
|
CU_ASSERT(child->payload_size == 128 * 1024);
|
||||||
@ -256,7 +256,7 @@ split_test3(void)
|
|||||||
nvme_free_request(child);
|
nvme_free_request(child);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 128 * 1024);
|
CU_ASSERT(child->payload_size == 128 * 1024);
|
||||||
@ -306,7 +306,7 @@ split_test4(void)
|
|||||||
SPDK_CU_ASSERT_FATAL(g_request->num_children == 3);
|
SPDK_CU_ASSERT_FATAL(g_request->num_children == 3);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == (256 - 10) * 512);
|
CU_ASSERT(child->payload_size == (256 - 10) * 512);
|
||||||
@ -318,7 +318,7 @@ split_test4(void)
|
|||||||
nvme_free_request(child);
|
nvme_free_request(child);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 128 * 1024);
|
CU_ASSERT(child->payload_size == 128 * 1024);
|
||||||
@ -330,7 +330,7 @@ split_test4(void)
|
|||||||
nvme_free_request(child);
|
nvme_free_request(child);
|
||||||
|
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
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);
|
nvme_cmd_interpret_rw(&child->cmd, &cmd_lba, &cmd_lba_count);
|
||||||
CU_ASSERT(child->num_children == 0);
|
CU_ASSERT(child->num_children == 0);
|
||||||
CU_ASSERT(child->payload_size == 10 * 512);
|
CU_ASSERT(child->payload_size == 10 * 512);
|
||||||
@ -355,10 +355,10 @@ test_cmd_child_request(void)
|
|||||||
struct spdk_nvme_ctrlr ctrlr;
|
struct spdk_nvme_ctrlr ctrlr;
|
||||||
struct spdk_nvme_qpair qpair;
|
struct spdk_nvme_qpair qpair;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
struct nvme_request *child;
|
struct nvme_request *child, *tmp;
|
||||||
void *payload;
|
void *payload;
|
||||||
uint64_t lba = 0x1000;
|
uint64_t lba = 0x1000;
|
||||||
uint32_t i;
|
uint32_t i = 0;
|
||||||
uint32_t offset = 0;
|
uint32_t offset = 0;
|
||||||
uint32_t sector_size = 512;
|
uint32_t sector_size = 512;
|
||||||
uint32_t max_io_size = 128 * 1024;
|
uint32_t max_io_size = 128 * 1024;
|
||||||
@ -383,9 +383,8 @@ test_cmd_child_request(void)
|
|||||||
CU_ASSERT(rc == 0);
|
CU_ASSERT(rc == 0);
|
||||||
CU_ASSERT(g_request->num_children == 4);
|
CU_ASSERT(g_request->num_children == 4);
|
||||||
|
|
||||||
for (i = 0; i < g_request->num_children; i++) {
|
TAILQ_FOREACH_SAFE(child, &g_request->children, child_tailq, tmp) {
|
||||||
child = TAILQ_FIRST(&g_request->children);
|
nvme_remove_child_request(g_request, child);
|
||||||
TAILQ_REMOVE(&g_request->children, child, child_tailq);
|
|
||||||
CU_ASSERT(child->payload_offset == offset);
|
CU_ASSERT(child->payload_offset == offset);
|
||||||
CU_ASSERT(child->cmd.opc == SPDK_NVME_OPC_READ);
|
CU_ASSERT(child->cmd.opc == SPDK_NVME_OPC_READ);
|
||||||
CU_ASSERT(child->cmd.nsid == ns.id);
|
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));
|
CU_ASSERT(child->cmd.cdw12 == ((sectors_per_max_io - 1) | 0));
|
||||||
offset += max_io_size;
|
offset += max_io_size;
|
||||||
nvme_free_request(child);
|
nvme_free_request(child);
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(payload);
|
free(payload);
|
||||||
|
@ -176,6 +176,14 @@ nvme_free_request(struct nvme_request *req)
|
|||||||
nvme_dealloc_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
|
static void
|
||||||
test1(void)
|
test1(void)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user