Loading lib/nvmf/conf.c +3 −3 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ spdk_nvmf_parse_init_grp(struct spdk_conf_section *sp) const char *mask; char **netmasks; int num_netmasks; struct spdk_nvmf_init_grp *init_grp; struct spdk_nvmf_host *host; for (num_netmasks = 0; ; num_netmasks++) { Loading Loading @@ -296,9 +296,9 @@ spdk_nvmf_parse_init_grp(struct spdk_conf_section *sp) } } init_grp = spdk_nvmf_init_grp_create(sp->num, num_netmasks, netmasks); host = spdk_nvmf_init_grp_create(sp->num, num_netmasks, netmasks); if (!init_grp) { if (!host) { free(netmasks); return -1; } Loading lib/nvmf/init_grp.c +39 −39 Original line number Diff line number Diff line Loading @@ -49,15 +49,15 @@ #define MAX_INITIATOR_NAME 256 #define MAX_NETMASK 256 static TAILQ_HEAD(, spdk_nvmf_init_grp) g_ig_head = TAILQ_HEAD_INITIALIZER(g_ig_head); static TAILQ_HEAD(, spdk_nvmf_host) g_host_head = TAILQ_HEAD_INITIALIZER(g_host_head); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * spdk_nvmf_init_grp_create(int tag, int num_netmasks, char **netmasks) { int i; struct spdk_nvmf_init_grp *ig = NULL; struct spdk_nvmf_host *host = NULL; /* Make sure there are no duplicate initiator group tags */ if (nvmf_initiator_group_find_by_tag(tag)) { Loading @@ -75,46 +75,46 @@ spdk_nvmf_init_grp_create(int tag, "add initiator group (from initiator list) tag=%d, #masks=%d\n", tag, num_netmasks); ig = calloc(1, sizeof(*ig)); if (!ig) { SPDK_ERRLOG("initiator group malloc error (%d)\n", tag); host = calloc(1, sizeof(*host)); if (!host) { SPDK_ERRLOG("Unable to allocate host (%d)\n", tag); return NULL; } ig->tag = tag; host->tag = tag; ig->nnetmasks = num_netmasks; ig->netmasks = netmasks; host->nnetmasks = num_netmasks; host->netmasks = netmasks; for (i = 0; i < num_netmasks; i++) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Netmask %s\n", ig->netmasks[i]); SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Netmask %s\n", host->netmasks[i]); } ig->state = GROUP_INIT; host->state = GROUP_INIT; pthread_mutex_lock(&g_nvmf_tgt.mutex); ig->state = GROUP_READY; TAILQ_INSERT_TAIL(&g_ig_head, ig, tailq); host->state = GROUP_READY; TAILQ_INSERT_TAIL(&g_host_head, host, tailq); pthread_mutex_unlock(&g_nvmf_tgt.mutex); return ig; return host; } static void nvmf_initiator_group_destroy(struct spdk_nvmf_init_grp *ig) nvmf_initiator_group_destroy(struct spdk_nvmf_host *host) { #if 0 // TODO: fix bogus scan-build warning about use-after-free int i; if (!ig) { if (!host) { return; } for (i = 0; i < ig->nnetmasks; i++) { free(ig->netmasks[i]); for (i = 0; i < host->nnetmasks; i++) { free(host->netmasks[i]); } free(ig->netmasks); free(ig); free(host->netmasks); free(host); #endif } Loading Loading @@ -239,25 +239,25 @@ spdk_nvmf_allow_netmask(const char *netmask, const char *addr) return 0; } struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_addr(char *addr) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; int i; int rc; if (addr == NULL) return NULL; TAILQ_FOREACH(ig, &g_ig_head, tailq) { TAILQ_FOREACH(host, &g_host_head, tailq) { /* check netmask of each group looking for permission */ for (i = 0; i < ig->nnetmasks; i++) { for (i = 0; i < host->nnetmasks; i++) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "netmask=%s, addr=%s\n", ig->netmasks[i], addr); rc = spdk_nvmf_allow_netmask(ig->netmasks[i], addr); host->netmasks[i], addr); rc = spdk_nvmf_allow_netmask(host->netmasks[i], addr); if (rc > 0) { /* OK netmask */ return ig; return host; } } } Loading @@ -267,15 +267,15 @@ nvmf_initiator_group_find_by_addr(char *addr) return NULL; } struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_tag(int tag) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; TAILQ_FOREACH(ig, &g_ig_head, tailq) { if (ig->tag == tag) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, " found initiator group with tag: ig %p\n", ig); return ig; TAILQ_FOREACH(host, &g_host_head, tailq) { if (host->tag == tag) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, " found initiator group with tag: host %p\n", host); return host; } } Loading @@ -285,15 +285,15 @@ nvmf_initiator_group_find_by_tag(int tag) void nvmf_initiator_group_array_destroy(void) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Enter\n"); pthread_mutex_lock(&g_nvmf_tgt.mutex); while (!TAILQ_EMPTY(&g_ig_head)) { ig = TAILQ_FIRST(&g_ig_head); ig->state = GROUP_DESTROY; TAILQ_REMOVE(&g_ig_head, ig, tailq); nvmf_initiator_group_destroy(ig); while (!TAILQ_EMPTY(&g_host_head)) { host = TAILQ_FIRST(&g_host_head); host->state = GROUP_DESTROY; TAILQ_REMOVE(&g_host_head, host, tailq); nvmf_initiator_group_destroy(host); } pthread_mutex_unlock(&g_nvmf_tgt.mutex); } lib/nvmf/init_grp.h +5 −5 Original line number Diff line number Diff line Loading @@ -37,25 +37,25 @@ #include "spdk/queue.h" #include "port.h" // For enum group_state struct spdk_nvmf_init_grp { struct spdk_nvmf_host { int nnetmasks; char **netmasks; int ref; int tag; enum group_state state; TAILQ_ENTRY(spdk_nvmf_init_grp) tailq; TAILQ_ENTRY(spdk_nvmf_host) tailq; }; /* NVMf Initiator Group management API */ struct spdk_nvmf_init_grp * struct spdk_nvmf_host * spdk_nvmf_init_grp_create(int tag, int num_netmasks, char **netmasks); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_tag(int tag); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_addr(char *addr); void Loading lib/nvmf/rdma.c +4 −4 Original line number Diff line number Diff line Loading @@ -406,7 +406,7 @@ nvmf_post_rdma_recv(struct spdk_nvmf_conn *conn, static int nvmf_rdma_cm_connect(struct rdma_cm_event *event) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; struct spdk_nvmf_fabric_intf *fabric_intf; struct rdma_cm_id *conn_id; struct spdk_nvmf_conn *conn; Loading Loading @@ -453,12 +453,12 @@ nvmf_rdma_cm_connect(struct rdma_cm_event *event) SPDK_TRACELOG(SPDK_TRACE_RDMA, "Connect Route: peer addr %s\n", addr_str); ig = nvmf_initiator_group_find_by_addr(addr_str); if (ig == NULL) { host = nvmf_initiator_group_find_by_addr(addr_str); if (host == NULL) { SPDK_ERRLOG("connect request: remote host addr not provisioned!\n"); goto err1; } SPDK_TRACELOG(SPDK_TRACE_RDMA, "Found approved remote host initiator group %p\n", ig); SPDK_TRACELOG(SPDK_TRACE_RDMA, "Found approved remote host %p\n", host); /* Init the NVMf rdma transport connection */ conn = spdk_nvmf_allocate_conn(); Loading lib/nvmf/subsystem_grp.c +12 −12 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ spdk_nvmf_subsystem_destruct(struct spdk_nvmf_subsystem_grp *ss_group) free(ss_group->name); for (i = 0; i < ss_group->map_count; i++) { ss_group->map[i].ig->ref--; ss_group->map[i].host->ref--; } /* Call NVMf library to free the subsystem */ Loading @@ -229,11 +229,11 @@ spdk_nvmf_subsystem_destruct(struct spdk_nvmf_subsystem_grp *ss_group) static int spdk_nvmf_subsystem_add_map(struct spdk_nvmf_subsystem_grp *ss_group, int port_tag, int ig_tag) int port_tag, int host_tag) { struct spdk_nvmf_access_map *map; struct spdk_nvmf_port *port; struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; port = spdk_nvmf_port_find_by_tag(port_tag); if (port == NULL) { Loading @@ -244,19 +244,19 @@ spdk_nvmf_subsystem_add_map(struct spdk_nvmf_subsystem_grp *ss_group, SPDK_ERRLOG("%s: Port%d not active\n", ss_group->name, port_tag); return -1; } ig = nvmf_initiator_group_find_by_tag(ig_tag); if (ig == NULL) { SPDK_ERRLOG("%s: Host%d not found\n", ss_group->name, ig_tag); host = nvmf_initiator_group_find_by_tag(host_tag); if (host == NULL) { SPDK_ERRLOG("%s: Host%d not found\n", ss_group->name, host_tag); return -1; } if (ig->state != GROUP_READY) { SPDK_ERRLOG("%s: Host%d not active\n", ss_group->name, ig_tag); if (host->state != GROUP_READY) { SPDK_ERRLOG("%s: Host%d not active\n", ss_group->name, host_tag); return -1; } ig->ref++; host->ref++; map = &ss_group->map[ss_group->map_count]; map->port = port; map->ig = ig; map->host = host; ss_group->map_count++; return 0; Loading Loading
lib/nvmf/conf.c +3 −3 Original line number Diff line number Diff line Loading @@ -267,7 +267,7 @@ spdk_nvmf_parse_init_grp(struct spdk_conf_section *sp) const char *mask; char **netmasks; int num_netmasks; struct spdk_nvmf_init_grp *init_grp; struct spdk_nvmf_host *host; for (num_netmasks = 0; ; num_netmasks++) { Loading Loading @@ -296,9 +296,9 @@ spdk_nvmf_parse_init_grp(struct spdk_conf_section *sp) } } init_grp = spdk_nvmf_init_grp_create(sp->num, num_netmasks, netmasks); host = spdk_nvmf_init_grp_create(sp->num, num_netmasks, netmasks); if (!init_grp) { if (!host) { free(netmasks); return -1; } Loading
lib/nvmf/init_grp.c +39 −39 Original line number Diff line number Diff line Loading @@ -49,15 +49,15 @@ #define MAX_INITIATOR_NAME 256 #define MAX_NETMASK 256 static TAILQ_HEAD(, spdk_nvmf_init_grp) g_ig_head = TAILQ_HEAD_INITIALIZER(g_ig_head); static TAILQ_HEAD(, spdk_nvmf_host) g_host_head = TAILQ_HEAD_INITIALIZER(g_host_head); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * spdk_nvmf_init_grp_create(int tag, int num_netmasks, char **netmasks) { int i; struct spdk_nvmf_init_grp *ig = NULL; struct spdk_nvmf_host *host = NULL; /* Make sure there are no duplicate initiator group tags */ if (nvmf_initiator_group_find_by_tag(tag)) { Loading @@ -75,46 +75,46 @@ spdk_nvmf_init_grp_create(int tag, "add initiator group (from initiator list) tag=%d, #masks=%d\n", tag, num_netmasks); ig = calloc(1, sizeof(*ig)); if (!ig) { SPDK_ERRLOG("initiator group malloc error (%d)\n", tag); host = calloc(1, sizeof(*host)); if (!host) { SPDK_ERRLOG("Unable to allocate host (%d)\n", tag); return NULL; } ig->tag = tag; host->tag = tag; ig->nnetmasks = num_netmasks; ig->netmasks = netmasks; host->nnetmasks = num_netmasks; host->netmasks = netmasks; for (i = 0; i < num_netmasks; i++) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Netmask %s\n", ig->netmasks[i]); SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Netmask %s\n", host->netmasks[i]); } ig->state = GROUP_INIT; host->state = GROUP_INIT; pthread_mutex_lock(&g_nvmf_tgt.mutex); ig->state = GROUP_READY; TAILQ_INSERT_TAIL(&g_ig_head, ig, tailq); host->state = GROUP_READY; TAILQ_INSERT_TAIL(&g_host_head, host, tailq); pthread_mutex_unlock(&g_nvmf_tgt.mutex); return ig; return host; } static void nvmf_initiator_group_destroy(struct spdk_nvmf_init_grp *ig) nvmf_initiator_group_destroy(struct spdk_nvmf_host *host) { #if 0 // TODO: fix bogus scan-build warning about use-after-free int i; if (!ig) { if (!host) { return; } for (i = 0; i < ig->nnetmasks; i++) { free(ig->netmasks[i]); for (i = 0; i < host->nnetmasks; i++) { free(host->netmasks[i]); } free(ig->netmasks); free(ig); free(host->netmasks); free(host); #endif } Loading Loading @@ -239,25 +239,25 @@ spdk_nvmf_allow_netmask(const char *netmask, const char *addr) return 0; } struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_addr(char *addr) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; int i; int rc; if (addr == NULL) return NULL; TAILQ_FOREACH(ig, &g_ig_head, tailq) { TAILQ_FOREACH(host, &g_host_head, tailq) { /* check netmask of each group looking for permission */ for (i = 0; i < ig->nnetmasks; i++) { for (i = 0; i < host->nnetmasks; i++) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, "netmask=%s, addr=%s\n", ig->netmasks[i], addr); rc = spdk_nvmf_allow_netmask(ig->netmasks[i], addr); host->netmasks[i], addr); rc = spdk_nvmf_allow_netmask(host->netmasks[i], addr); if (rc > 0) { /* OK netmask */ return ig; return host; } } } Loading @@ -267,15 +267,15 @@ nvmf_initiator_group_find_by_addr(char *addr) return NULL; } struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_tag(int tag) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; TAILQ_FOREACH(ig, &g_ig_head, tailq) { if (ig->tag == tag) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, " found initiator group with tag: ig %p\n", ig); return ig; TAILQ_FOREACH(host, &g_host_head, tailq) { if (host->tag == tag) { SPDK_TRACELOG(SPDK_TRACE_DEBUG, " found initiator group with tag: host %p\n", host); return host; } } Loading @@ -285,15 +285,15 @@ nvmf_initiator_group_find_by_tag(int tag) void nvmf_initiator_group_array_destroy(void) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; SPDK_TRACELOG(SPDK_TRACE_DEBUG, "Enter\n"); pthread_mutex_lock(&g_nvmf_tgt.mutex); while (!TAILQ_EMPTY(&g_ig_head)) { ig = TAILQ_FIRST(&g_ig_head); ig->state = GROUP_DESTROY; TAILQ_REMOVE(&g_ig_head, ig, tailq); nvmf_initiator_group_destroy(ig); while (!TAILQ_EMPTY(&g_host_head)) { host = TAILQ_FIRST(&g_host_head); host->state = GROUP_DESTROY; TAILQ_REMOVE(&g_host_head, host, tailq); nvmf_initiator_group_destroy(host); } pthread_mutex_unlock(&g_nvmf_tgt.mutex); }
lib/nvmf/init_grp.h +5 −5 Original line number Diff line number Diff line Loading @@ -37,25 +37,25 @@ #include "spdk/queue.h" #include "port.h" // For enum group_state struct spdk_nvmf_init_grp { struct spdk_nvmf_host { int nnetmasks; char **netmasks; int ref; int tag; enum group_state state; TAILQ_ENTRY(spdk_nvmf_init_grp) tailq; TAILQ_ENTRY(spdk_nvmf_host) tailq; }; /* NVMf Initiator Group management API */ struct spdk_nvmf_init_grp * struct spdk_nvmf_host * spdk_nvmf_init_grp_create(int tag, int num_netmasks, char **netmasks); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_tag(int tag); struct spdk_nvmf_init_grp * struct spdk_nvmf_host * nvmf_initiator_group_find_by_addr(char *addr); void Loading
lib/nvmf/rdma.c +4 −4 Original line number Diff line number Diff line Loading @@ -406,7 +406,7 @@ nvmf_post_rdma_recv(struct spdk_nvmf_conn *conn, static int nvmf_rdma_cm_connect(struct rdma_cm_event *event) { struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; struct spdk_nvmf_fabric_intf *fabric_intf; struct rdma_cm_id *conn_id; struct spdk_nvmf_conn *conn; Loading Loading @@ -453,12 +453,12 @@ nvmf_rdma_cm_connect(struct rdma_cm_event *event) SPDK_TRACELOG(SPDK_TRACE_RDMA, "Connect Route: peer addr %s\n", addr_str); ig = nvmf_initiator_group_find_by_addr(addr_str); if (ig == NULL) { host = nvmf_initiator_group_find_by_addr(addr_str); if (host == NULL) { SPDK_ERRLOG("connect request: remote host addr not provisioned!\n"); goto err1; } SPDK_TRACELOG(SPDK_TRACE_RDMA, "Found approved remote host initiator group %p\n", ig); SPDK_TRACELOG(SPDK_TRACE_RDMA, "Found approved remote host %p\n", host); /* Init the NVMf rdma transport connection */ conn = spdk_nvmf_allocate_conn(); Loading
lib/nvmf/subsystem_grp.c +12 −12 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ spdk_nvmf_subsystem_destruct(struct spdk_nvmf_subsystem_grp *ss_group) free(ss_group->name); for (i = 0; i < ss_group->map_count; i++) { ss_group->map[i].ig->ref--; ss_group->map[i].host->ref--; } /* Call NVMf library to free the subsystem */ Loading @@ -229,11 +229,11 @@ spdk_nvmf_subsystem_destruct(struct spdk_nvmf_subsystem_grp *ss_group) static int spdk_nvmf_subsystem_add_map(struct spdk_nvmf_subsystem_grp *ss_group, int port_tag, int ig_tag) int port_tag, int host_tag) { struct spdk_nvmf_access_map *map; struct spdk_nvmf_port *port; struct spdk_nvmf_init_grp *ig; struct spdk_nvmf_host *host; port = spdk_nvmf_port_find_by_tag(port_tag); if (port == NULL) { Loading @@ -244,19 +244,19 @@ spdk_nvmf_subsystem_add_map(struct spdk_nvmf_subsystem_grp *ss_group, SPDK_ERRLOG("%s: Port%d not active\n", ss_group->name, port_tag); return -1; } ig = nvmf_initiator_group_find_by_tag(ig_tag); if (ig == NULL) { SPDK_ERRLOG("%s: Host%d not found\n", ss_group->name, ig_tag); host = nvmf_initiator_group_find_by_tag(host_tag); if (host == NULL) { SPDK_ERRLOG("%s: Host%d not found\n", ss_group->name, host_tag); return -1; } if (ig->state != GROUP_READY) { SPDK_ERRLOG("%s: Host%d not active\n", ss_group->name, ig_tag); if (host->state != GROUP_READY) { SPDK_ERRLOG("%s: Host%d not active\n", ss_group->name, host_tag); return -1; } ig->ref++; host->ref++; map = &ss_group->map[ss_group->map_count]; map->port = port; map->ig = ig; map->host = host; ss_group->map_count++; return 0; Loading