Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 7 Nov 2013 21:47:59 +0000 (UTC)
From:      Sean Bruno <sbruno@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r257820 - head/usr.sbin/mfiutil
Message-ID:  <201311072147.rA7Llxw9070669@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: sbruno
Date: Thu Nov  7 21:47:59 2013
New Revision: 257820
URL: http://svnweb.freebsd.org/changeset/base/257820

Log:
  Add support for controlling mfi(4) controller properties:
  
  allow user control of rebuild rate
  allow user control of silence/enable alarm
  
  MFC after:	2 weeks
  Sponsored by:	Yahoo! Inc.

Added:
  head/usr.sbin/mfiutil/mfi_properties.c   (contents, props changed)
Modified:
  head/usr.sbin/mfiutil/Makefile
  head/usr.sbin/mfiutil/mfiutil.8
  head/usr.sbin/mfiutil/mfiutil.c

Modified: head/usr.sbin/mfiutil/Makefile
==============================================================================
--- head/usr.sbin/mfiutil/Makefile	Thu Nov  7 21:38:46 2013	(r257819)
+++ head/usr.sbin/mfiutil/Makefile	Thu Nov  7 21:47:59 2013	(r257820)
@@ -2,7 +2,8 @@
 PROG=	mfiutil
 
 SRCS=	mfiutil.c mfi_bbu.c mfi_cmd.c mfi_config.c mfi_drive.c mfi_evt.c \
-	mfi_flash.c mfi_patrol.c mfi_show.c mfi_volume.c mfi_foreign.c
+	mfi_flash.c mfi_patrol.c mfi_show.c mfi_volume.c mfi_foreign.c \
+	mfi_properties.c
 MAN8=	mfiutil.8
 
 CFLAGS+= -fno-builtin-strftime

Added: head/usr.sbin/mfiutil/mfi_properties.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/usr.sbin/mfiutil/mfi_properties.c	Thu Nov  7 21:47:59 2013	(r257820)
@@ -0,0 +1,171 @@
+/*-
+ * Copyright (c) 2013 Yahoo!, Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *
+ * $FreeBSD$
+ */
+
+#include <sys/errno.h>
+#include <sys/ioctl.h>
+#include <sys/param.h>
+#include <sys/sysctl.h>
+#include <sys/uio.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "mfiutil.h"
+#include <dev/mfi/mfi_ioctl.h>
+
+MFI_TABLE(top, ctrlprop);
+
+static int
+mfi_ctrl_get_properties(int fd, struct mfi_ctrl_props *info)
+{
+
+	return (mfi_dcmd_command(fd, MFI_DCMD_CTRL_GET_PROPS, info,
+	    sizeof(struct mfi_ctrl_props), NULL, 0, NULL));
+}
+
+static int
+mfi_ctrl_set_properties(int fd, struct mfi_ctrl_props *info)
+{
+
+	return (mfi_dcmd_command(fd, MFI_DCMD_CTRL_SET_PROPS, info,
+	    sizeof(struct mfi_ctrl_props), NULL, 0, NULL));
+}
+
+/*
+ * aquite the controller properties data structure modify the 
+ * rebuild rate if requested and then retun
+ */
+static int
+mfi_ctrl_rebuild_rate(int ac, char **av)
+{
+        int error, fd;
+	struct mfi_ctrl_props ctrl_props;
+
+	if (ac > 2) {
+		warn("mfi_ctrl_set_rebuild_rate");
+		return(-1);
+	}
+		
+        fd = mfi_open(mfi_unit, O_RDWR);
+        if (fd < 0) {
+                error = errno;
+                warn("mfi_open");
+                return (error);
+        }
+
+	error = mfi_ctrl_get_properties(fd, &ctrl_props);
+        if ( error < 0) {
+                error = errno;
+                warn("Failed to get controller properties");
+                close(fd);
+                return (error);
+        }
+	/*
+	 * User requested a change to the rebuild rate
+	 */
+	if (ac > 1) {
+		ctrl_props.rebuild_rate = atoi(av[ac - 1]);
+		error = mfi_ctrl_set_properties(fd, &ctrl_props);
+        	if ( error < 0) {
+                	error = errno;
+                	warn("Failed to set controller properties");
+                	close(fd);
+                	return (error);
+        	}
+
+		error = mfi_ctrl_get_properties(fd, &ctrl_props);
+        	if ( error < 0) {
+                	error = errno;
+                	warn("Failed to get controller properties");
+                	close(fd);
+                	return (error);
+        	}
+	}
+	printf ("controller rebuild rate: %%%u \n",
+		ctrl_props.rebuild_rate);
+	return (0);
+}
+MFI_COMMAND(ctrlprop, rebuild, mfi_ctrl_rebuild_rate);
+
+static int
+mfi_ctrl_alarm_enable(int ac, char **av)
+{
+        int error, fd;
+	struct mfi_ctrl_props ctrl_props;
+
+	if (ac > 2) {
+		warn("mfi_ctrl_alarm_enable");
+		return(-1);
+	}
+		
+        fd = mfi_open(mfi_unit, O_RDWR);
+        if (fd < 0) {
+                error = errno;
+                warn("mfi_open");
+                return (error);
+        }
+
+	error = mfi_ctrl_get_properties(fd, &ctrl_props);
+        if ( error < 0) {
+                error = errno;
+                warn("Failed to get controller properties");
+                close(fd);
+                return (error);
+        }
+	printf ("controller alarm was : %s\n",
+		(ctrl_props.alarm_enable ? "enabled" : "disabled"));
+
+	if (ac > 1) {
+		ctrl_props.alarm_enable = atoi(av[ac - 1]);
+		error = mfi_ctrl_set_properties(fd, &ctrl_props);
+        	if ( error < 0) {
+                	error = errno;
+                	warn("Failed to set controller properties");
+                	close(fd);
+                	return (error);
+        	}
+
+		error = mfi_ctrl_get_properties(fd, &ctrl_props);
+        	if ( error < 0) {
+                	error = errno;
+                	warn("Failed to get controller properties");
+                	close(fd);
+                	return (error);
+        	}
+	}
+	printf ("controller alarm was : %s\n",
+		(ctrl_props.alarm_enable ? "enabled" : "disabled"));
+	return (0);
+}
+
+MFI_COMMAND(ctrlprop, alarm, mfi_ctrl_alarm_enable);

Modified: head/usr.sbin/mfiutil/mfiutil.8
==============================================================================
--- head/usr.sbin/mfiutil/mfiutil.8	Thu Nov  7 21:38:46 2013	(r257819)
+++ head/usr.sbin/mfiutil/mfiutil.8	Thu Nov  7 21:47:59 2013	(r257820)
@@ -168,6 +168,12 @@
 .Nm
 .Op Fl u Ar unit
 .Cm bbu Ar setting Ar value
+.Nm
+.Op Fl u Ar unit
+.Cm ctrlprop Ar rebuild Op Ar rate
+.Nm
+.Op Fl u Ar unit
+.Cm ctrlprop Ar alarm Op Ar 0/1
 .Sh DESCRIPTION
 The
 .Nm
@@ -659,6 +665,12 @@ inclusive.
 Modes 1, 2 and 3 enable a transparent learn cycle, whereas modes 4 and 5 do not.
 The BBU's data retention time is greater when transparent learning is not used.
 .El
+.It Cm ctrlprop Ar rebuild Op Ar rate
+With no arguments display the rate of rebuild (percentage)a for volumes.
+With an integer argument (0-100), set that value as the new rebuild rate for volumes.
+.It Cm ctrlprop Ar alarm Op Ar 0/1
+With no arguments display the current alarm enable/disable status.
+With a 0, disable alarms.  With a 1, enable alarms.
 .El
 .Sh EXAMPLES
 Configure the cache for volume mfid0 to cache only writes:
@@ -699,6 +711,10 @@ patrol read starting in 5 minutes:
 Display the second detected foreign configuration:
 .Pp
 .Dl Nm Cm show foreign 1
+.Pp
+Set the current rebuild rate for volumes to 40%:
+.Dl Nm Cm ctrlprop rebuild 40
+.Pp
 .Sh SEE ALSO
 .Xr mfi 4
 .Sh HISTORY

Modified: head/usr.sbin/mfiutil/mfiutil.c
==============================================================================
--- head/usr.sbin/mfiutil/mfiutil.c	Thu Nov  7 21:38:46 2013	(r257819)
+++ head/usr.sbin/mfiutil/mfiutil.c	Thu Nov  7 21:47:59 2013	(r257820)
@@ -93,6 +93,8 @@ usage(void)
 	fprintf(stderr, "    flash <firmware>\n");
 	fprintf(stderr, "    start learn               - start a BBU relearn\n");
 	fprintf(stderr, "    bbu <setting> <value>     - set BBU properties\n");
+	fprintf(stderr, "    ctrlprop rebuild [rate]   - get/set the volume rebuild rate\n");
+	fprintf(stderr, "    ctrlprop alarm [0/1]      - enable/disable controller alarms\n");
 #ifdef DEBUG
 	fprintf(stderr, "    debug                     - debug 'show config'\n");
 	fprintf(stderr, "    dump                      - display 'saved' config\n");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201311072147.rA7Llxw9070669>