Module Name: src
Committed By: jdolecek
Date: Wed Apr 5 18:34:56 UTC 2017
Modified Files:
src/sys/dev: ccd.c
src/sys/sys: dkio.h
Log Message:
introduce DKCACHE_COMBINE() macro - it combines the flags in a way that
all common flags are retained, and flags regarding write cache are preserved
if either of the devices has it; callers can thus rely on write cache not
being possible to be used when both flags are missing
use the new macro for ccd(4)
To generate a diff of this commit:
cvs rdiff -u -r1.170 -r1.171 src/sys/dev/ccd.c
cvs rdiff -u -r1.22 -r1.23 src/sys/sys/dkio.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ccd.c
diff -u src/sys/dev/ccd.c:1.170 src/sys/dev/ccd.c:1.171
--- src/sys/dev/ccd.c:1.170 Thu Mar 30 16:50:32 2017
+++ src/sys/dev/ccd.c Wed Apr 5 18:34:56 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: ccd.c,v 1.170 2017/03/30 16:50:32 jdolecek Exp $ */
+/* $NetBSD: ccd.c,v 1.171 2017/04/05 18:34:56 jdolecek Exp $ */
/*-
* Copyright (c) 1996, 1997, 1998, 1999, 2007, 2009 The NetBSD Foundation, Inc.
@@ -88,7 +88,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.170 2017/03/30 16:50:32 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ccd.c,v 1.171 2017/04/05 18:34:56 jdolecek Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -1432,7 +1432,7 @@ ccdioctl(dev_t dev, u_long cmd, void *da
if (i == 0)
dkcache = j;
else
- dkcache &= j;
+ dkcache = DKCACHE_COMBINE(dkcache, j);
}
*((int *)data) = dkcache;
Index: src/sys/sys/dkio.h
diff -u src/sys/sys/dkio.h:1.22 src/sys/sys/dkio.h:1.23
--- src/sys/sys/dkio.h:1.22 Tue Dec 8 20:36:15 2015
+++ src/sys/sys/dkio.h Wed Apr 5 18:34:56 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: dkio.h,v 1.22 2015/12/08 20:36:15 christos Exp $ */
+/* $NetBSD: dkio.h,v 1.23 2017/04/05 18:34:56 jdolecek Exp $ */
/*
* Copyright (c) 1987, 1988, 1993
@@ -86,6 +86,15 @@
#define DKCACHE_WCHANGE 0x000200 /* write enable is changeable */
#define DKCACHE_SAVE 0x010000 /* cache parameters are savable/save them */
+/*
+ * Combine disk cache flags of two drives to get common cache capabilities.
+ * All common flags are retained. Besides this, if one of the disks
+ * has a write cache enabled or changeable, propagate those flags into result,
+ * even if it's not shared, to indicate that write cache is present.
+ */
+#define DKCACHE_COMBINE(a, b) \
+ (((a) & (b)) | (((a) | (b)) & (DKCACHE_WRITE|DKCACHE_WCHANGE)))
+
/* sync disk cache */
#define DIOCCACHESYNC _IOW('d', 118, int) /* sync cache (force?) */