*BSD News Article 5050


Return to BSD News archive

Newsgroups: comp.unix.bsd
Path: sserve!manuel!munnari.oz.au!uunet!mcsun!sunic!aun.uninett.no!barsoom!barsoom!tih
From: tih@barsoom.nhh.no (Tom Ivar Helbekkmo)
Subject: [386bsd] A bugfix to my modified wd driver!
Message-ID: <tih.716534020@barsoom>
Sender: news@barsoom.nhh.no (USENET News System)
Organization: Norwegian School of Economics
Date: Tue, 15 Sep 1992 05:13:40 GMT
Lines: 52

Well, it turns out that there's a bug in the bad144 handling in my
modified wd driver after all!  (And of course, luck (and insufficient
testing on my part) caused me never to run into it because I only
have bad sectors in partitions that start at the beginning of the
disk!)

The problem was pointed out to me, with the fix, by Terry Lee
(terry@uivlsi.csl.uiuc.edu), and is caused by not correcting the
block numbers we're looking for for partition offset.  (In my code,
I used a variable, blknum, that wasn't corrected originally because
it was never used again.)

Thanks, Terry!

Here's the patch *to the last version of my wd.c*.  If you're picked
up my stuff from barsoom.nhh.no, and this patch doesn't match your
line numbers perfectly, ftp the wd.c file again.  There have been
some efficiency updates lately...  :-)

*** wd.c.old	Tue Sep 15 06:55:09 1992
--- wd.c	Tue Sep 15 06:55:15 1992
***************
*** 418,429 ****
      lp = &du->dk_dd;
      secpertrk = lp->d_nsectors;
      secpercyl = lp->d_secpercyl;
      cylin = blknum / secpercyl;
      head = (blknum % secpercyl) / secpertrk;
      sector = blknum % secpertrk;
-     if ((du->dk_flags & DKFL_BSDLABEL) != 0 && wdpart(bp->b_dev) != WDRAW)
- 	cylin += lp->d_partitions[wdpart(bp->b_dev)].p_offset
- 	    / secpercyl;
      
  #ifdef TIHBAD144
      /* Check for bad sectors if we have them, and not formatting */
--- 418,428 ----
      lp = &du->dk_dd;
      secpertrk = lp->d_nsectors;
      secpercyl = lp->d_secpercyl;
+     if ((du->dk_flags & DKFL_BSDLABEL) != 0 && wdpart(bp->b_dev) != WDRAW)
+ 	blknum += lp->d_partitions[wdpart(bp->b_dev)].p_offset;
      cylin = blknum / secpercyl;
      head = (blknum % secpercyl) / secpertrk;
      sector = blknum % secpertrk;
      
  #ifdef TIHBAD144
      /* Check for bad sectors if we have them, and not formatting */

-tih
--
Tom Ivar Helbekkmo, NHH, Bergen, Norway.  Telephone: +47-5-959205
Postmaster for domain nhh.no.   Internet mail: tih@barsoom.nhh.no