diff options
author | Simon J. Gerraty <sjg@FreeBSD.org> | 2014-04-28 07:50:45 +0000 |
---|---|---|
committer | Simon J. Gerraty <sjg@FreeBSD.org> | 2014-04-28 07:50:45 +0000 |
commit | 3b8f08459569bf0faa21473e5cec2491e95c9349 (patch) | |
tree | 80f45dd81ca716bcd7ca9674581e1fc40b93cd34 /usr.sbin/mfiutil | |
parent | 9d2ab4a62d6733c45958627ac113bdbd818d1e2a (diff) | |
parent | b2ba55951383498f252746f618d513139da06e8e (diff) | |
download | src-test2-3b8f08459569bf0faa21473e5cec2491e95c9349.tar.gz src-test2-3b8f08459569bf0faa21473e5cec2491e95c9349.zip |
Merge head
Notes
Notes:
svn path=/projects/bmake/; revision=265044
Diffstat (limited to 'usr.sbin/mfiutil')
-rw-r--r-- | usr.sbin/mfiutil/Makefile | 5 | ||||
-rw-r--r-- | usr.sbin/mfiutil/mfi_evt.c | 18 | ||||
-rw-r--r-- | usr.sbin/mfiutil/mfi_properties.c | 171 | ||||
-rw-r--r-- | usr.sbin/mfiutil/mfi_show.c | 4 | ||||
-rw-r--r-- | usr.sbin/mfiutil/mfiutil.8 | 15 | ||||
-rw-r--r-- | usr.sbin/mfiutil/mfiutil.c | 4 |
6 files changed, 206 insertions, 11 deletions
diff --git a/usr.sbin/mfiutil/Makefile b/usr.sbin/mfiutil/Makefile index f6e358a24e62..4fe6f0345222 100644 --- a/usr.sbin/mfiutil/Makefile +++ b/usr.sbin/mfiutil/Makefile @@ -2,10 +2,11 @@ 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 +CFLAGS.gcc+= -fno-builtin-strftime DPADD= ${LIBUTIL} LDADD= -lutil diff --git a/usr.sbin/mfiutil/mfi_evt.c b/usr.sbin/mfiutil/mfi_evt.c index c9a1a6dc567b..901c0bd0a9d7 100644 --- a/usr.sbin/mfiutil/mfi_evt.c +++ b/usr.sbin/mfiutil/mfi_evt.c @@ -33,6 +33,7 @@ #include <sys/errno.h> #include <err.h> #include <fcntl.h> +#include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <strings.h> @@ -534,6 +535,7 @@ show_events(int ac, char **av) struct mfi_evt_log_state info; struct mfi_evt_list *list; union mfi_evt filter; + bool first; long val; char *cp; ssize_t size; @@ -640,7 +642,9 @@ show_events(int ac, char **av) close(fd); return (ENOMEM); } - for (seq = start;;) { + first = true; + seq = start; + for (;;) { if (mfi_get_events(fd, list, num_events, filter, seq, &status) < 0) { error = errno; @@ -650,8 +654,6 @@ show_events(int ac, char **av) return (error); } if (status == MFI_STAT_NOT_FOUND) { - if (seq == start) - warnx("No matching events found"); break; } if (status != MFI_STAT_OK) { @@ -669,13 +671,14 @@ show_events(int ac, char **av) * the case that our stop point is earlier in * the buffer than our start point. */ - if (list->event[i].seq >= stop) { + if (list->event[i].seq > stop) { if (start <= stop) - break; + goto finish; else if (list->event[i].seq < start) - break; + goto finish; } mfi_decode_evt(fd, &list->event[i], verbose); + first = false; } /* @@ -686,6 +689,9 @@ show_events(int ac, char **av) seq = list->event[list->count - 1].seq + 1; } +finish: + if (first) + warnx("No matching events found"); free(list); close(fd); diff --git a/usr.sbin/mfiutil/mfi_properties.c b/usr.sbin/mfiutil/mfi_properties.c new file mode 100644 index 000000000000..c9c9204d5004 --- /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 <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); diff --git a/usr.sbin/mfiutil/mfi_show.c b/usr.sbin/mfiutil/mfi_show.c index 6bb86124f996..f541045b409b 100644 --- a/usr.sbin/mfiutil/mfi_show.c +++ b/usr.sbin/mfiutil/mfi_show.c @@ -320,7 +320,7 @@ print_pd(struct mfi_pd_info *info, int state_len) const char *s; char buf[256]; - humanize_number(buf, sizeof(buf), info->raw_size * 512, "", + humanize_number(buf, 6, info->raw_size * 512, "", HN_AUTOSCALE, HN_B | HN_NOSPACE |HN_DECIMAL); printf("(%6s) ", buf); if (info->state.ddf.v.pd_type.is_foreign) { @@ -766,7 +766,7 @@ show_progress(int ac, char **av __unused) printf("drive %s ", mfi_drive_name(NULL, device_id, MFI_DNAME_DEVICE_ID|MFI_DNAME_HONOR_OPTS)); mfi_display_progress("Clear", &pinfo.prog_info.clear); - + busy = 1; } } diff --git a/usr.sbin/mfiutil/mfiutil.8 b/usr.sbin/mfiutil/mfiutil.8 index 8346922c9e68..e999c77a35b5 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,9 @@ 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 .Sh SEE ALSO .Xr mfi 4 .Sh HISTORY diff --git a/usr.sbin/mfiutil/mfiutil.c b/usr.sbin/mfiutil/mfiutil.c index a8d9ef826449..85ce25c11f32 100644 --- a/usr.sbin/mfiutil/mfiutil.c +++ b/usr.sbin/mfiutil/mfiutil.c @@ -78,7 +78,7 @@ usage(void) fprintf(stderr, " name <volume> <name>\n"); fprintf(stderr, " volume progress <volume> - display status of active operations\n"); fprintf(stderr, " clear - clear volume configuration\n"); - fprintf(stderr, " create <type> [-v] <drive>[,<drive>[,...]] [<drive>[,<drive>[,...]]\n"); + fprintf(stderr, " create <type> [-v] [-s stripe_size] <drive>[,<drive>[,...]] [<drive>[,<drive>[,...]]\n"); fprintf(stderr, " delete <volume>\n"); fprintf(stderr, " add <drive> [volume] - add a hot spare\n"); fprintf(stderr, " remove <drive> - remove a hot spare\n"); @@ -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"); |