nvmf: ctrlr_discovery.c no longer uses g_nvmf_tgt

Change-Id: I19d1866fb90ffd3e3543ccc66a098571ade3e3de
Signed-off-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/375203
Tested-by: SPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
Ben Walker 2017-08-21 13:58:04 -07:00 committed by Jim Harris
parent 656e443dd1
commit f1015fbda6
6 changed files with 31 additions and 25 deletions

View File

@ -821,7 +821,7 @@ spdk_nvmf_ctrlr_get_log_page(struct spdk_nvmf_request *req)
if (subsystem->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY) {
switch (lid) {
case SPDK_NVME_LOG_DISCOVERY:
spdk_nvmf_get_discovery_log_page(req->data, offset, len);
spdk_nvmf_get_discovery_log_page(subsystem->tgt, req->data, offset, len);
return SPDK_NVMF_REQUEST_EXEC_STATUS_COMPLETE;
default:
goto invalid_log_page;

View File

@ -51,7 +51,7 @@
#include "spdk_internal/log.h"
static void
nvmf_update_discovery_log(void)
nvmf_update_discovery_log(struct spdk_nvmf_tgt *tgt)
{
uint64_t numrec = 0;
struct spdk_nvmf_subsystem *subsystem;
@ -63,7 +63,7 @@ nvmf_update_discovery_log(void)
size_t cur_size;
SPDK_TRACELOG(SPDK_TRACE_NVMF, "Generating log page for genctr %" PRIu64 "\n",
g_nvmf_tgt.discovery_genctr);
tgt->discovery_genctr);
cur_size = sizeof(struct spdk_nvmf_discovery_log_page);
disc_log = calloc(1, cur_size);
@ -72,7 +72,7 @@ nvmf_update_discovery_log(void)
return;
}
TAILQ_FOREACH(subsystem, &g_nvmf_tgt.subsystems, entries) {
TAILQ_FOREACH(subsystem, &tgt->subsystems, entries) {
if (subsystem->subtype == SPDK_NVMF_SUBTYPE_DISCOVERY) {
continue;
}
@ -96,11 +96,11 @@ nvmf_update_discovery_log(void)
memset(entry, 0, sizeof(*entry));
entry->portid = numrec;
entry->cntlid = 0xffff;
entry->asqsz = g_nvmf_tgt.opts.max_queue_depth;
entry->asqsz = tgt->opts.max_queue_depth;
entry->subtype = subsystem->subtype;
snprintf(entry->subnqn, sizeof(entry->subnqn), "%s", subsystem->subnqn);
transport = spdk_nvmf_tgt_get_transport(&g_nvmf_tgt, listen_addr->trid.trtype);
transport = spdk_nvmf_tgt_get_transport(tgt, listen_addr->trid.trtype);
assert(transport != NULL);
spdk_nvmf_transport_listen_addr_discover(transport, listen_addr, entry);
@ -110,30 +110,31 @@ nvmf_update_discovery_log(void)
}
disc_log->numrec = numrec;
disc_log->genctr = g_nvmf_tgt.discovery_genctr;
disc_log->genctr = tgt->discovery_genctr;
free(g_nvmf_tgt.discovery_log_page);
free(tgt->discovery_log_page);
g_nvmf_tgt.discovery_log_page = disc_log;
g_nvmf_tgt.discovery_log_page_size = cur_size;
tgt->discovery_log_page = disc_log;
tgt->discovery_log_page_size = cur_size;
}
void
spdk_nvmf_get_discovery_log_page(void *buffer, uint64_t offset, uint32_t length)
spdk_nvmf_get_discovery_log_page(struct spdk_nvmf_tgt *tgt, void *buffer,
uint64_t offset, uint32_t length)
{
size_t copy_len = 0;
size_t zero_len = length;
if (g_nvmf_tgt.discovery_log_page == NULL ||
g_nvmf_tgt.discovery_log_page->genctr != g_nvmf_tgt.discovery_genctr) {
nvmf_update_discovery_log();
if (tgt->discovery_log_page == NULL ||
tgt->discovery_log_page->genctr != tgt->discovery_genctr) {
nvmf_update_discovery_log(tgt);
}
/* Copy the valid part of the discovery log page, if any */
if (g_nvmf_tgt.discovery_log_page && offset < g_nvmf_tgt.discovery_log_page_size) {
copy_len = spdk_min(g_nvmf_tgt.discovery_log_page_size - offset, length);
if (tgt->discovery_log_page && offset < tgt->discovery_log_page_size) {
copy_len = spdk_min(tgt->discovery_log_page_size - offset, length);
zero_len -= copy_len;
memcpy(buffer, (char *)g_nvmf_tgt.discovery_log_page + offset, copy_len);
memcpy(buffer, (char *)tgt->discovery_log_page + offset, copy_len);
}
/* Zero out the rest of the buffer */

View File

@ -41,7 +41,9 @@
struct spdk_nvmf_subsystem *spdk_nvmf_find_subsystem_with_cntlid(uint16_t cntlid);
void spdk_nvmf_get_discovery_log_page(void *buffer, uint64_t offset, uint32_t length);
void spdk_nvmf_get_discovery_log_page(struct spdk_nvmf_tgt *tgt,
void *buffer, uint64_t offset,
uint32_t length);
int spdk_nvmf_subsystem_bdev_attach(struct spdk_nvmf_subsystem *subsystem);
void spdk_nvmf_subsystem_bdev_detach(struct spdk_nvmf_subsystem *subsystem);

View File

@ -138,7 +138,8 @@ spdk_nvmf_bdev_ctrlr_identify_ns(struct spdk_bdev *bdev, struct spdk_nvme_ns_dat
}
void
spdk_nvmf_get_discovery_log_page(void *buffer, uint64_t offset, uint32_t length)
spdk_nvmf_get_discovery_log_page(struct spdk_nvmf_tgt *tgt, void *buffer,
uint64_t offset, uint32_t length)
{
abort();
}

View File

@ -209,20 +209,21 @@ test_discovery_log(void)
/* Get only genctr (first field in the header) */
memset(buffer, 0xCC, sizeof(buffer));
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(disc_log->genctr));
spdk_nvmf_get_discovery_log_page(&g_nvmf_tgt, buffer, 0, sizeof(disc_log->genctr));
CU_ASSERT(disc_log->genctr == 1); /* one added subsystem */
/* Get only the header, no entries */
memset(buffer, 0xCC, sizeof(buffer));
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(*disc_log));
spdk_nvmf_get_discovery_log_page(&g_nvmf_tgt, buffer, 0, sizeof(*disc_log));
CU_ASSERT(disc_log->genctr == 1);
CU_ASSERT(disc_log->numrec == 1);
/* Offset 0, exact size match */
memset(buffer, 0xCC, sizeof(buffer));
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(*disc_log) + sizeof(disc_log->entries[0]));
spdk_nvmf_get_discovery_log_page(&g_nvmf_tgt, buffer, 0,
sizeof(*disc_log) + sizeof(disc_log->entries[0]));
CU_ASSERT(disc_log->genctr != 0);
CU_ASSERT(disc_log->numrec == 1);
CU_ASSERT(disc_log->entries[0].trtype == 42);
@ -230,7 +231,7 @@ test_discovery_log(void)
/* Offset 0, oversize buffer */
memset(buffer, 0xCC, sizeof(buffer));
disc_log = (struct spdk_nvmf_discovery_log_page *)buffer;
spdk_nvmf_get_discovery_log_page(buffer, 0, sizeof(buffer));
spdk_nvmf_get_discovery_log_page(&g_nvmf_tgt, buffer, 0, sizeof(buffer));
CU_ASSERT(disc_log->genctr != 0);
CU_ASSERT(disc_log->numrec == 1);
CU_ASSERT(disc_log->entries[0].trtype == 42);
@ -240,7 +241,7 @@ test_discovery_log(void)
/* Get just the first entry, no header */
memset(buffer, 0xCC, sizeof(buffer));
entry = (struct spdk_nvmf_discovery_log_page_entry *)buffer;
spdk_nvmf_get_discovery_log_page(buffer,
spdk_nvmf_get_discovery_log_page(&g_nvmf_tgt, buffer,
offsetof(struct spdk_nvmf_discovery_log_page, entries[0]),
sizeof(*entry));
CU_ASSERT(entry->trtype == 42);

View File

@ -134,7 +134,8 @@ spdk_nvmf_property_set(struct spdk_nvmf_ctrlr *ctrlr,
}
void
spdk_nvmf_get_discovery_log_page(void *buffer, uint64_t offset, uint32_t length)
spdk_nvmf_get_discovery_log_page(struct spdk_nvmf_tgt *tgt, void *buffer,
uint64_t offset, uint32_t length)
{
}