From 6d5e175ceb85f51379f0ff7477ade6dc25e7e954 Mon Sep 17 00:00:00 2001 From: sepotvin Date: Fri, 12 Sep 2008 17:40:17 +0000 Subject: 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 --- usr.sbin/mlxcontrol/command.c | 2 +- usr.sbin/mlxcontrol/interface.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) (limited to 'usr.sbin') diff --git a/usr.sbin/mlxcontrol/command.c b/usr.sbin/mlxcontrol/command.c index a364767..a7dc88f 100644 --- a/usr.sbin/mlxcontrol/command.c +++ b/usr.sbin/mlxcontrol/command.c @@ -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); diff --git a/usr.sbin/mlxcontrol/interface.c b/usr.sbin/mlxcontrol/interface.c index 5cbf7b6..2c7e12b 100644 --- a/usr.sbin/mlxcontrol/interface.c +++ b/usr.sbin/mlxcontrol/interface.c @@ -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) -- cgit v1.1