[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
How to map unit/cyl/head/sect to FEP-File? (continued)
Date: Thu, 1 Apr 1993 05:03 EST
From: beschta@arms2.zfe.siemens.de (Anton Beschta)
Date: Wed, 31 Mar 1993 12:50 -0500
From: Barry Margolin <barmar@think.com>
I can name that tune in 1 line:
(si:get-file-containing (si:dpn-from-address unit cyl head sect))
barmar
Date: Wed, 31 Mar 93 11:51:10 CST
From: gadbois@mcc.com (David Gadbois)
The functions are SI:DPN-FROM-ADDRESS, which gives you the DPN from
the unit, cylinder, head, and sector numbers (remember that the FEP
gives these to you in octal!) and SI:GET-FILE-CONTAINING, which gives
you the file containing a DPN. If the error is in a LMFS partition,
be very careful not to splice out the bad block, lest complete mayhem
result.
--David Gadbois
Thanks for the hint! And here are the three lines of code that
I had in mind (but were partially garbage colleced by time :-)
(si:fix-fep-file
(car (si:get-file-containing
(si:dpn-from-address #o<unit> #o<cyl> #o<head> #o<sect>))))
Ok, now I know that there is a problem in my Genera 8.1 world load
file. I.e. the last two full GCs resulted in an irrecoverable disk
search error at exactly the same address.
I used to get disk search errors during dynamic GC's (I never did full
GC's) alot before I replaced my 3640 with a 3650, but diagnostics would
never find a problem with the block. I suspect there's something about
the way GC accesses the disk that tends to exacerbate minor problems
that the diagnostics don't notice.
But unfortunately si:fix-fep-file doesn't find any bad blocks in this
file! And I ran it more than once (even between above GCs because
at this time I mapped si:fix-fep-file over all active FEP files).
My next question is (more or less) straight forward:
How can I replace a certain block with a copy of it without having
si:fix-fep-file to find it?
I think this should do what you need:
(defun replace-fep-block (unit cylinder head sector)
(si:with-bad-block-structures (od da de)
(let ((dpn (si:dpn-from-address unit cylinder head sector))
(bad-block-info (make-instance 'si:bad-block-tester
:original-data od
:disk-array da
:disk-event de)))
(si:handle-bad-block bad-block-info dpn))))
This is just the function SI:ZAP-FEP-BLOCK with the :READ-ONLY T option
removed from the call to SI:HANDLE-BAD-BLOCK. This change will allow it
to offer the "Copy" option, which is what you want.
barmar