From b8e29b5517fdfd1cab68dab8d7573d0aea26a8a2 Mon Sep 17 00:00:00 2001 From: Satoshi Asami Date: Wed, 31 Jan 1996 11:25:46 +0000 Subject: [PATCH] Fix one warning and fix one bug found while looking at another warning (but caused by a different reason): . #ifndef __FreeBSD__ around check for negative size, FreeBSD size_t is unsigned . Disable mirror/parity if interleave size is 0 (i.e., serial concatenation). --- sys/dev/ccd/ccd.c | 10 +++++++++- sys/geom/geom_ccd.c | 10 +++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/sys/dev/ccd/ccd.c b/sys/dev/ccd/ccd.c index c6b349c0044a..68b7f208beb2 100644 --- a/sys/dev/ccd/ccd.c +++ b/sys/dev/ccd/ccd.c @@ -1,4 +1,4 @@ -/* $Id: ccd.c,v 1.5 1996/01/30 22:34:53 asami Exp $ */ +/* $Id: ccd.c,v 1.6 1996/01/31 03:28:21 asami Exp $ */ /* $NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $ */ @@ -372,8 +372,10 @@ ccdinit(ccd, cpaths, p) * Calculate the size, truncating to an interleave * boundary if necessary. */ +#ifndef __FreeBSD__ if (size < 0) size = 0; +#endif if (cs->sc_ileave > 1) size -= size % cs->sc_ileave; @@ -1087,6 +1089,12 @@ ccdioctl(dev, cmd, data, flag, p) /* Fill in some important bits. */ ccd.ccd_unit = unit; ccd.ccd_interleave = ccio->ccio_ileave; + if (ccd.ccd_interleave == 0 && + ((ccio->ccio_flags & CCDF_MIRROR) || + (ccio->ccio_flags & CCDF_PARITY))) { + printf("ccd%d: disabling mirror/parity, interleave is 0\n", unit); + ccio->ccio_flags &= ~(CCDF_MIRROR | CCDF_PARITY); + } if ((ccio->ccio_flags & CCDF_MIRROR) && (ccio->ccio_flags & CCDF_PARITY)) { printf("ccd%d: can't specify both mirror and parity, using mirror\n", unit); diff --git a/sys/geom/geom_ccd.c b/sys/geom/geom_ccd.c index c6b349c0044a..68b7f208beb2 100644 --- a/sys/geom/geom_ccd.c +++ b/sys/geom/geom_ccd.c @@ -1,4 +1,4 @@ -/* $Id: ccd.c,v 1.5 1996/01/30 22:34:53 asami Exp $ */ +/* $Id: ccd.c,v 1.6 1996/01/31 03:28:21 asami Exp $ */ /* $NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $ */ @@ -372,8 +372,10 @@ ccdinit(ccd, cpaths, p) * Calculate the size, truncating to an interleave * boundary if necessary. */ +#ifndef __FreeBSD__ if (size < 0) size = 0; +#endif if (cs->sc_ileave > 1) size -= size % cs->sc_ileave; @@ -1087,6 +1089,12 @@ ccdioctl(dev, cmd, data, flag, p) /* Fill in some important bits. */ ccd.ccd_unit = unit; ccd.ccd_interleave = ccio->ccio_ileave; + if (ccd.ccd_interleave == 0 && + ((ccio->ccio_flags & CCDF_MIRROR) || + (ccio->ccio_flags & CCDF_PARITY))) { + printf("ccd%d: disabling mirror/parity, interleave is 0\n", unit); + ccio->ccio_flags &= ~(CCDF_MIRROR | CCDF_PARITY); + } if ((ccio->ccio_flags & CCDF_MIRROR) && (ccio->ccio_flags & CCDF_PARITY)) { printf("ccd%d: can't specify both mirror and parity, using mirror\n", unit);