summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/wd.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/i386/isa/wd.c')
-rw-r--r--sys/i386/isa/wd.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/sys/i386/isa/wd.c b/sys/i386/isa/wd.c
index 2794ecd..b088890 100644
--- a/sys/i386/isa/wd.c
+++ b/sys/i386/isa/wd.c
@@ -37,7 +37,7 @@ static int wdtest = 0;
* SUCH DAMAGE.
*
* from: @(#)wd.c 7.2 (Berkeley) 5/9/91
- * $Id: wd.c,v 1.37 1994/04/10 11:17:13 csgr Exp $
+ * $Id: wd.c,v 1.39 1994/05/25 09:00:19 rgrimes Exp $
*/
/* TODO:
@@ -86,7 +86,9 @@ static int wdtest = 0;
#define TIMEOUT 10000
#define RETRIES 5 /* number of retries before giving up */
#define RECOVERYTIME 500000 /* usec for controller to recover after err */
-#define MAXTRANSFER 256 /* max size of transfer in sectors */
+#define MAXTRANSFER 255 /* max size of transfer in sectors */
+ /* correct max is 256 but some controllers */
+ /* can't handle that in all cases */
#define BAD144_NO_CYL 0xffff /* XXX should be in dkbad.h; bad144.c uses -1 */
#ifdef notyet
@@ -515,9 +517,13 @@ loop:
if (du->dk_skip == 0) {
du->dk_bc = bp->b_bcount;
- if (bp->b_flags & B_BAD) {
+ if (bp->b_flags & B_BAD
+ /*
+ * XXX handle large transfers inefficiently instead
+ * of crashing on them.
+ */
+ || howmany(du->dk_bc, DEV_BSIZE) > MAXTRANSFER)
du->dk_flags |= DKFL_SINGLE;
- }
}
if ((du->dk_flags & (DKFL_SINGLE|DKFL_BADSECT)) /* 19 Aug 92*/
OpenPOWER on IntegriCloud