Data Recovery on Deferred Errors

Gerry Houlder Gerry_Houlder at
Sun Sep 6 23:24:59 PDT 2015

_Date: 02-26-94 02:01:26 PM
_To: scsireflector
_Cc: Jim Coomes
_Cc: Mike Miller
_Cc: Bharat Kothari
_Recipient: scsi at WichitaKS.NCR.COM@internet
_From: Gerry Houlder at SEAGATE
_Subject: Data Recovery on Deferred Errors


We have a customer that is concerned about recovering write data after a 
deferred error. When Write Caching is used, the WRITE command will return GOOD 
status before the data is written to the disc. If an unrecoverable error occurs 
during that write operation, a later command from the same initiator will end 
with CHECK CONDITION status. The sense bytes for that error will report 
Deferred Error and the Logical Block Address of the erroring block. When such 
an error occurs, the customer wants to read the unwritten data back and attempt 
to retry the write (possibly at a different location). Existing direct access 
device SCSI doesn't have enough information/commands to do this to our 
customer's satisfaction.


The Auto Contingent Allegiance (ACA) feature of SCSI-3 is almost enough. The 
ACA procedure allows for retrieving sense data, then issuing a READ command to 
"retrieve" the unwritten data from the target's buffer. Of course, the target 
must be careful to retain all write data for failed write commands (and allow 
that data to be used to satisfy subsequent READ requests) until after the 
Contingent Allegiance is cleared. The returned sense data will contain the 
first LBA that was not written to disc in the information bytes. This can be 
used by the following READ command to retrieve the unwritten data. The only 
item that is still unknown is the number of blocks of unwritten data that is 

The host is not interested in retaining the starting LBA/number of blocks 
information for all write commands. They consider this to be almost as bad as 
having to retain the write data. The problem is that there is no definite time 
when the data is guaranteed to be written to disk and the information doesn't 
need to be retained any more. Therefore they want the returned sense data to 
indicate the number of blocks of unwritten data that are available as well as 
the LBA of the first unwritten block.

I believe the "Command Specific Information Bytes" could be used for this 
purpose. This is a 4 byte field. Existing command descriptor blocks have a 
maximum of 2 bytes for the number of blocks to be transferred, although there 
has been talk of 12 and 16 byte CDBs that may have a 4 byte transfer length 
field. In reality, the number is limited to much lower values by the buffer 
space available on the target device. This use of the command specific 
information bytes could be required only for the "deferred error" sense type. 
This would limit most of the "backwards compatibility" problems.

I will introduce this idea at the March 16 SCSI Working Group Meeting at 
Newport Beach. If anyone would like to make comments or suggestions for 
improvements before then, my Internet address is:
     gerry_houlder at

Gerry Houlder (Gerry_Houlder at
Seagate Technology   -   920 Disc Drive   -   Scotts Valley, CA 95066 USA
Main Phone 408-438-6550   -   Email Problems postmaster at
Technical Support: BBS 408-438-8771  Fax 408-438-8137  Voice 408-438-8222  

More information about the T10 mailing list