Changeset View
Changeset View
Standalone View
Standalone View
head/sys/geom/virstor/g_virstor.c
Show First 20 Lines • Show All 307 Lines • ▼ Show 20 Lines | virstor_ctl_add(struct gctl_req *req, struct g_class *cp) | ||||
} | } | ||||
fcp = sc->components[0].gcons; | fcp = sc->components[0].gcons; | ||||
added = 0; | added = 0; | ||||
g_topology_lock(); | g_topology_lock(); | ||||
for (i = 1; i < *nargs; i++) { | for (i = 1; i < *nargs; i++) { | ||||
struct g_virstor_metadata md; | struct g_virstor_metadata md; | ||||
char aname[8]; | char aname[8]; | ||||
const char *prov_name; | |||||
struct g_provider *pp; | struct g_provider *pp; | ||||
struct g_consumer *cp; | struct g_consumer *cp; | ||||
u_int nc; | u_int nc; | ||||
u_int j; | u_int j; | ||||
snprintf(aname, sizeof aname, "arg%d", i); | snprintf(aname, sizeof aname, "arg%d", i); | ||||
prov_name = gctl_get_asciiparam(req, aname); | pp = gctl_get_provider(req, aname); | ||||
if (prov_name == NULL) { | |||||
gctl_error(req, "Error fetching argument '%s'", aname); | |||||
g_topology_unlock(); | |||||
return; | |||||
} | |||||
if (strncmp(prov_name, _PATH_DEV, sizeof(_PATH_DEV) - 1) == 0) | |||||
prov_name += sizeof(_PATH_DEV) - 1; | |||||
pp = g_provider_by_name(prov_name); | |||||
if (pp == NULL) { | if (pp == NULL) { | ||||
/* This is the most common error so be verbose about it */ | /* This is the most common error so be verbose about it */ | ||||
if (added != 0) { | if (added != 0) { | ||||
gctl_error(req, "Invalid provider: '%s' (added" | gctl_error(req, "Invalid provider. (added" | ||||
" %u components)", prov_name, added); | " %u components)", added); | ||||
update_metadata(sc); | update_metadata(sc); | ||||
} else { | |||||
gctl_error(req, "Invalid provider: '%s'", | |||||
prov_name); | |||||
} | } | ||||
g_topology_unlock(); | g_topology_unlock(); | ||||
return; | return; | ||||
} | } | ||||
cp = g_new_consumer(sc->geom); | cp = g_new_consumer(sc->geom); | ||||
if (cp == NULL) { | if (cp == NULL) { | ||||
gctl_error(req, "Cannot create consumer"); | gctl_error(req, "Cannot create consumer"); | ||||
g_topology_unlock(); | g_topology_unlock(); | ||||
▲ Show 20 Lines • Show All 1,541 Lines • Show Last 20 Lines |