Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/raid/md_ddf.c
Show First 20 Lines • Show All 2,302 Lines • ▼ Show 20 Lines | if (strcmp(verb, "label") == 0) { | ||||
/* Search for disks, connect them and probe. */ | /* Search for disks, connect them and probe. */ | ||||
size = INT64_MAX; | size = INT64_MAX; | ||||
sectorsize = 0; | sectorsize = 0; | ||||
bzero(disks, sizeof(disks)); | bzero(disks, sizeof(disks)); | ||||
bzero(offs, sizeof(offs)); | bzero(offs, sizeof(offs)); | ||||
for (i = 0; i < numdisks; i++) { | for (i = 0; i < numdisks; i++) { | ||||
snprintf(arg, sizeof(arg), "arg%d", i + 3); | snprintf(arg, sizeof(arg), "arg%d", i + 3); | ||||
diskname = gctl_get_asciiparam(req, arg); | diskname = gctl_get_providername(req, arg); | ||||
if (diskname == NULL) { | if (diskname == NULL) { | ||||
gctl_error(req, "No disk name (%s).", arg); | |||||
error = -6; | error = -6; | ||||
break; | break; | ||||
} | } | ||||
if (strcmp(diskname, "NONE") == 0) | if (strcmp(diskname, "NONE") == 0) | ||||
continue; | continue; | ||||
TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { | TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { | ||||
if (disk->d_consumer != NULL && | if (disk->d_consumer != NULL && | ||||
▲ Show 20 Lines • Show All 285 Lines • ▼ Show 20 Lines | g_raid_md_ctl_ddf(struct g_raid_md_object *md, | ||||
if (strcmp(verb, "remove") == 0 || | if (strcmp(verb, "remove") == 0 || | ||||
strcmp(verb, "fail") == 0) { | strcmp(verb, "fail") == 0) { | ||||
if (*nargs < 2) { | if (*nargs < 2) { | ||||
gctl_error(req, "Invalid number of arguments."); | gctl_error(req, "Invalid number of arguments."); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
for (i = 1; i < *nargs; i++) { | for (i = 1; i < *nargs; i++) { | ||||
snprintf(arg, sizeof(arg), "arg%d", i); | snprintf(arg, sizeof(arg), "arg%d", i); | ||||
diskname = gctl_get_asciiparam(req, arg); | diskname = gctl_get_providername(req, arg); | ||||
if (diskname == NULL) { | if (diskname == NULL) { | ||||
gctl_error(req, "No disk name (%s).", arg); | |||||
error = -2; | error = -2; | ||||
break; | break; | ||||
} | } | ||||
if (strncmp(diskname, _PATH_DEV, 5) == 0) | |||||
diskname += 5; | |||||
TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { | TAILQ_FOREACH(disk, &sc->sc_disks, d_next) { | ||||
if (disk->d_consumer != NULL && | if (disk->d_consumer != NULL && | ||||
disk->d_consumer->provider != NULL && | disk->d_consumer->provider != NULL && | ||||
strcmp(disk->d_consumer->provider->name, | strcmp(disk->d_consumer->provider->name, | ||||
diskname) == 0) | diskname) == 0) | ||||
break; | break; | ||||
} | } | ||||
Show All 28 Lines | g_raid_md_ctl_ddf(struct g_raid_md_object *md, | ||||
if (strcmp(verb, "insert") == 0) { | if (strcmp(verb, "insert") == 0) { | ||||
if (*nargs < 2) { | if (*nargs < 2) { | ||||
gctl_error(req, "Invalid number of arguments."); | gctl_error(req, "Invalid number of arguments."); | ||||
return (-1); | return (-1); | ||||
} | } | ||||
for (i = 1; i < *nargs; i++) { | for (i = 1; i < *nargs; i++) { | ||||
/* Get disk name. */ | /* Get disk name. */ | ||||
snprintf(arg, sizeof(arg), "arg%d", i); | snprintf(arg, sizeof(arg), "arg%d", i); | ||||
diskname = gctl_get_asciiparam(req, arg); | diskname = gctl_get_providername(req, arg); | ||||
if (diskname == NULL) { | if (diskname == NULL) { | ||||
gctl_error(req, "No disk name (%s).", arg); | |||||
error = -3; | error = -3; | ||||
break; | break; | ||||
} | } | ||||
/* Try to find provider with specified name. */ | /* Try to find provider with specified name. */ | ||||
g_topology_lock(); | g_topology_lock(); | ||||
cp = g_raid_open_consumer(sc, diskname); | cp = g_raid_open_consumer(sc, diskname); | ||||
if (cp == NULL) { | if (cp == NULL) { | ||||
▲ Show 20 Lines • Show All 413 Lines • Show Last 20 Lines |