From owner-svn-src-all@FreeBSD.ORG Tue Apr 5 14:19:05 2011 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 5B3E1106566C; Tue, 5 Apr 2011 14:19:05 +0000 (UTC) (envelope-from jhb@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 4B7828FC18; Tue, 5 Apr 2011 14:19:05 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p35EJ5Qs020683; Tue, 5 Apr 2011 14:19:05 GMT (envelope-from jhb@svn.freebsd.org) Received: (from jhb@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p35EJ5i1020680; Tue, 5 Apr 2011 14:19:05 GMT (envelope-from jhb@svn.freebsd.org) Message-Id: <201104051419.p35EJ5i1020680@svn.freebsd.org> From: John Baldwin Date: Tue, 5 Apr 2011 14:19:05 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r220363 - head/usr.sbin/mfiutil X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Apr 2011 14:19:05 -0000 Author: jhb Date: Tue Apr 5 14:19:05 2011 New Revision: 220363 URL: http://svn.freebsd.org/changeset/base/220363 Log: Add the ability to manage the state of write caching when the battery back-up is missing or dead. The current state of this field is reported in 'mfiutil cache ' and can be adjusted via 'mfiutil cache bad-bbu-write-cache '. This setting should generally be disabled to avoid data loss. MFC after: 1 week Modified: head/usr.sbin/mfiutil/mfi_volume.c head/usr.sbin/mfiutil/mfiutil.8 Modified: head/usr.sbin/mfiutil/mfi_volume.c ============================================================================== --- head/usr.sbin/mfiutil/mfi_volume.c Tue Apr 5 14:15:58 2011 (r220362) +++ head/usr.sbin/mfiutil/mfi_volume.c Tue Apr 5 14:19:05 2011 (r220363) @@ -138,6 +138,10 @@ update_cache_policy(int fd, struct mfi_l policy & MR_LD_CACHE_READ_AHEAD ? (policy & MR_LD_CACHE_READ_ADAPTIVE ? "adaptive" : "always") : "none"); + if (changes & MR_LD_CACHE_WRITE_CACHE_BAD_BBU) + printf("%s write caching with bad BBU\n", + policy & MR_LD_CACHE_WRITE_CACHE_BAD_BBU ? "Enabling" : + "Disabling"); props->default_cache_policy = policy; if (mfi_ld_set_props(fd, props) < 0) { @@ -182,7 +186,7 @@ volume_cache(int ac, char **av) if (ac == 2) { printf("mfi%u volume %s cache settings:\n", mfi_unit, mfi_volume_name(fd, target_id)); - printf(" I/O caching: "); + printf(" I/O caching: "); switch (props.default_cache_policy & (MR_LD_CACHE_ALLOW_WRITE_CACHE | MR_LD_CACHE_ALLOW_READ_CACHE)) { @@ -200,14 +204,17 @@ volume_cache(int ac, char **av) printf("writes and reads\n"); break; } - printf(" write caching: %s\n", + printf(" write caching: %s\n", props.default_cache_policy & MR_LD_CACHE_WRITE_BACK ? "write-back" : "write-through"); - printf(" read ahead: %s\n", + printf("write cache with bad BBU: %s\n", + props.default_cache_policy & + MR_LD_CACHE_WRITE_CACHE_BAD_BBU ? "enabled" : "disabled"); + printf(" read ahead: %s\n", props.default_cache_policy & MR_LD_CACHE_READ_AHEAD ? (props.default_cache_policy & MR_LD_CACHE_READ_ADAPTIVE ? "adaptive" : "always") : "none"); - printf("drive write cache: "); + printf(" drive write cache: "); switch (props.disk_cache_policy) { case MR_PD_CACHE_UNCHANGED: printf("default\n"); @@ -273,6 +280,21 @@ volume_cache(int ac, char **av) error = update_cache_policy(fd, &props, policy, MR_LD_CACHE_READ_AHEAD | MR_LD_CACHE_READ_ADAPTIVE); + } else if (strcmp(av[2], "bad-bbu-write-cache") == 0) { + if (ac < 4) { + warnx("cache: bad BBU setting required"); + return (EINVAL); + } + if (strcmp(av[3], "enable") == 0) + policy = MR_LD_CACHE_WRITE_CACHE_BAD_BBU; + else if (strcmp(av[3], "disable") == 0) + policy = 0; + else { + warnx("cache: invalid bad BBU setting"); + return (EINVAL); + } + error = update_cache_policy(fd, &props, policy, + MR_LD_CACHE_WRITE_CACHE_BAD_BBU); } else if (strcmp(av[2], "write-cache") == 0) { if (ac < 4) { warnx("cache: write-cache setting required"); Modified: head/usr.sbin/mfiutil/mfiutil.8 ============================================================================== --- head/usr.sbin/mfiutil/mfiutil.8 Tue Apr 5 14:15:58 2011 (r220362) +++ head/usr.sbin/mfiutil/mfiutil.8 Tue Apr 5 14:19:05 2011 (r220363) @@ -27,7 +27,7 @@ .\" .\" $FreeBSD$ .\" -.Dd August 16, 2009 +.Dd April 5, 2011 .Dt MFIUTIL 8 .Os .Sh NAME @@ -367,7 +367,7 @@ Enable caching only for write I/O operat Use write-back policy for cached writes. .It Cm write-through Use write-through policy for cached writes. -.It Cm read-ahead Op Ar value +.It Cm read-ahead Ar value Set the read ahead policy for cached reads. The .Ar value @@ -376,7 +376,18 @@ argument can be set to either .Dq adaptive , or .Dq always . -.It Cm write-cache Op Ar value +.It Cm bad-bbu-write-cache Ar value +Control the behavior of I/O write caching if the battery is dead or +missing. +The +.Ar value +argument can be set to either +.Dq disable +or +.Dq enable . +In general this setting should be left disabled to avoid data loss when +the system loses power. +.It Cm write-cache Ar value Control the write caches on the physical drives backing .Ar volume . The