Make mlxcontrol work with more than one system drive:

- When searching for the next system drive, return the next one instead
  of always returning the first one.
- Plug fd lead and make sure that the MLX_NEXT_CHILD ioctl is called
  on the controller fd, not the disk's one.

While there, fix a cut-n-pase error in a warning.

Reviewed by:	jhb
Approved by:	kan (mentor)
MFC after:	1 month
This commit is contained in:
Stephane E. Potvin 2008-09-12 17:40:17 +00:00
parent 3d0f3248ea
commit 29e6fa3a7f
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=182965
3 changed files with 7 additions and 5 deletions

View File

@ -760,7 +760,7 @@ mlx_ioctl(struct cdev *dev, u_long cmd, caddr_t addr, int32_t flag, struct threa
if (sc->mlx_sysdrive[i].ms_disk != 0) {
/* looking for the next one we come across? */
if (*arg == -1) {
*arg = device_get_unit(sc->mlx_sysdrive[0].ms_disk);
*arg = device_get_unit(sc->mlx_sysdrive[i].ms_disk);
return(0);
}
/* we want the one after this one */

View File

@ -628,7 +628,7 @@ cmd_rebuild(int argc, char *argv[])
warnx("drive rebuild or consistency check is already in progress on this controller");
break;
default:
warn("ioctl MLXD_CHECKASYNC");
warn("ioctl MLXD_REBUILDASYNC");
}
}
return(0);

View File

@ -79,16 +79,18 @@ void
mlxd_foreach_ctrlr(int unit, void *arg)
{
struct mlxd_foreach_action *ma = (struct mlxd_foreach_action *)arg;
int i, fd;
int i, fd, ctrlfd;
/* Get the device */
if ((fd = open(ctrlrpath(unit), 0)) < 0)
if ((ctrlfd = open(ctrlrpath(unit), 0)) < 0)
return;
for (i = -1; ;) {
/* Get the unit number of the next child device */
if (ioctl(fd, MLX_NEXT_CHILD, &i) < 0)
if (ioctl(ctrlfd, MLX_NEXT_CHILD, &i) < 0) {
close(ctrlfd);
return;
}
/* check that we can open this unit */
if ((fd = open(drivepath(i), 0)) >= 0)