From f5135ba0f01b0d2b1958cc40ebebec55a47cdc26 Mon Sep 17 00:00:00 2001 From: smh Date: Tue, 23 Sep 2014 21:38:05 +0000 Subject: [PATCH] MFC r271429, r271882: Add support for controlling mfi(4) controller properties Approved by: re (glebius) Sponsored by: Multiplay git-svn-id: svn://svn.freebsd.org/base/stable/10@272041 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- usr.sbin/mfiutil/Makefile | 3 +- usr.sbin/mfiutil/mfi_properties.c | 171 ++++++++++++++++++++++++++++++ usr.sbin/mfiutil/mfiutil.8 | 16 +++ usr.sbin/mfiutil/mfiutil.c | 2 + 4 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 usr.sbin/mfiutil/mfi_properties.c diff --git a/usr.sbin/mfiutil/Makefile b/usr.sbin/mfiutil/Makefile index ed2d4cc02..4fe6f0345 100644 --- a/usr.sbin/mfiutil/Makefile +++ b/usr.sbin/mfiutil/Makefile @@ -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.gcc+= -fno-builtin-strftime diff --git a/usr.sbin/mfiutil/mfi_properties.c b/usr.sbin/mfiutil/mfi_properties.c new file mode 100644 index 000000000..b03d522c3 --- /dev/null +++ b/usr.sbin/mfiutil/mfi_properties.c @@ -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 +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "mfiutil.h" +#include + +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); diff --git a/usr.sbin/mfiutil/mfiutil.8 b/usr.sbin/mfiutil/mfiutil.8 index 8346922c9..6ff652ff9 100644 --- a/usr.sbin/mfiutil/mfiutil.8 +++ b/usr.sbin/mfiutil/mfiutil.8 @@ -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 diff --git a/usr.sbin/mfiutil/mfiutil.c b/usr.sbin/mfiutil/mfiutil.c index a8d9ef826..677bc33b4 100644 --- a/usr.sbin/mfiutil/mfiutil.c +++ b/usr.sbin/mfiutil/mfiutil.c @@ -93,6 +93,8 @@ usage(void) fprintf(stderr, " flash \n"); fprintf(stderr, " start learn - start a BBU relearn\n"); fprintf(stderr, " bbu - 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"); -- 2.45.0