Return to BSD News archive
Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!sgiblab!sdd.hp.com!usc!newshub.sdsu.edu!ucselx!crash!fpm
From: fpm@crash.cts.com (Frank Maclachlan)
Subject: Bug in 386BSD 0.1 wd driver (w/ fix)
Organization: CTS Network Services (crash, ctsnet), El Cajon, CA
Date: 17 Sep 92 04:38:57 PDT
Message-ID: <1992Sep17.043859.28089@crash>
Followup-To: comp.unix.bsd
Summary: Raw wd device fails to report errors
Keywords: wd,bug,patch
References: <9226116.6625@mulga.cs.mu.OZ.AU>
Lines: 62
----------------------------BUG REPORT------------------------
Name: Frank MacLachlan
Email address: fpm@crash.cts.com
Date: 92/09/16
Hardware info:
ISA mb w/ OPTi chip set, AMD 386DX/40, 64kb cache & AMI bios
16 mb ram
STB SVGA
Western Digital WD1007V-SE2 ESDI HD/FD controller
Imprimus 94166-182 182 mb ESDI hard disk
Problem description:
I/O errors are not reported when reading/writing from/to the raw
wd disk device. I noticed this when using 'dd' to scan a disk
w/ known bad blocks and couldn't find any.
The wd driver, '/sys/i386/isa/wd.c', sets the B_ERROR bit in
bp->b_flags at lines 533 and 553, but fails to put an error code
into bp->b_error. Physio() in '/sys/kern/kern__physio.c', which
manages the raw I/O in this case, ignores the B_ERROR bit in b_flags
and looks for an error code in b_error. The user program is fed
garbage data and no clue that an error occurred.
Problem suspicions:
Solution:
Apply the following patch to '/sys/i386/isa/wd.c'. The patch
assumes that you are patching a virgin wd.c; if not you'll have
to apply the changes manually.
*** wd.c.ORIG Wed Sep 16 23:32:01 1992
--- wd.c Wed Sep 16 23:33:35 1992
***************
*** 530,535 ****
--- 530,536 ----
}
#ifdef B_FORMAT
if (bp->b_flags & B_FORMAT) {
+ bp->b_error = EIO;
bp->b_flags |= B_ERROR;
goto done;
}
***************
*** 550,555 ****
--- 551,557 ----
inb(wdc+wd_error), WDERR_BITS);
#endif
}
+ bp->b_error = EIO;
bp->b_flags |= B_ERROR; /* flag the error */
}
} else if((du->dk_flags&DKFL_QUIET) == 0) {
----------------------------------------------------------------
UUCP: {hplabs!hp-sdd ucsd nosc}!crash!fpm
ARPA: crash!fpm@nosc.mil
INET: fpm@crash.cts.com