Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 Oct 1998 14:47:27 -0800
From:      Mike Smith <mike@smith.net.au>
To:        Harold Gutch <logix@foobar.franken.de>
Cc:        Mike Smith <mike@smith.net.au>, stable@FreeBSD.ORG
Subject:   Re: HD problems 
Message-ID:  <199810282247.OAA00727@dingo.cdrom.com>
In-Reply-To: Your message of "Wed, 28 Oct 1998 23:41:41 %2B0100." <19981028234141.A913@foobar.franken.de> 

next in thread | previous in thread | raw e-mail | index | archive | help
> On Wed, Oct 28, 1998 at 12:06:17PM -0800, Mike Smith wrote:
> > Your disk is taking longer to handle the error than we allow it to. Your
> > best bet at this point is probably to mount the partition forced
> > readonly (mount -f -o ro), copy everything meaningful off the the
> > partition, then dd zeroes over it to give the drive a chance to remap 
> > the sector(s) in question.
> > 
> Is there an easy way to set the timeout-values higher, like patch
> a couple of lines in the wd-driver to at least give me enough
> time to backup the whole thing, and then nuke the data that currently
> still is on it ?
> I hope this idea isn't foredoomed due to some other reason.
> If not, I'll try mounting it readonly and then go on...

Yup.  Look for the code that looks like this:

        /*
         * Schedule wdtimeout() to wake up after a few seconds.  Retrying
         * unmarked bad blocks can take 3 seconds!  Then it is not good that
         * we retry 5 times.
         *
         * On the first try, we give it 10 seconds, for drives that may need
         * to spin up.
         *
         * XXX wdtimeout() doesn't increment the error count so we may loop
         * forever.  More seriously, the loop isn't forever but causes a
         * crash.
         *
         * TODO fix b_resid bug elsewhere (fd.c....).  Fix short but positive
         * counts being discarded after there is an error (in physio I
         * think).  Discarding them would be OK if the (special) file offset
         * was not advanced.
         */
        if (wdtab[ctrlr].b_errcnt == 0)
                du->dk_timeout = 1 + 10;
        else
                du->dk_timeout = 1 + 3;


and change the 10 to 30 or so.

-- 
\\  Sometimes you're ahead,       \\  Mike Smith
\\  sometimes you're behind.      \\  mike@smith.net.au
\\  The race is long, and in the  \\  msmith@freebsd.org
\\  end it's only with yourself.  \\  msmith@cdrom.com



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-stable" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199810282247.OAA00727>