Changeset View
Changeset View
Standalone View
Standalone View
sys/geom/raid/md_sii.c
Show First 20 Lines • Show All 1,161 Lines • ▼ Show 20 Lines | if (!g_raid_md_sii_supported(level, qual, numdisks, | ||||
return (-5); | return (-5); | ||||
} | } | ||||
/* Search for disks, connect them and probe. */ | /* Search for disks, connect them and probe. */ | ||||
size = 0x7fffffffffffffffllu; | size = 0x7fffffffffffffffllu; | ||||
sectorsize = 0; | sectorsize = 0; | ||||
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) { | ||||
cp = NULL; | cp = NULL; | ||||
pp = NULL; | pp = NULL; | ||||
} else { | } else { | ||||
g_topology_lock(); | g_topology_lock(); | ||||
▲ Show 20 Lines • Show All 161 Lines • ▼ Show 20 Lines | g_raid_md_ctl_sii(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 20 Lines • Show All 47 Lines • ▼ Show 20 Lines | 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); | ||||
} | } | ||||
update = 0; | update = 0; | ||||
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 241 Lines • Show Last 20 Lines |