Command retry is a function of many IBM® 3990 and newer storage controllers. When the channel subsystem
receives a retry request, it repeats the execution of the CCW, without
requiring any additional input/output interrupts. For example, a storage
control might initiate a retry procedure to recover from a transient
error.
A command retry during the execution of a channel program can cause
the following conditions to be detected by the initiating program:
- Modifying
CCWs: For EXCPVR and EXCP V=R requests, a CCW used in a channel program
must not be modified before the CCW operation has been successfully
completed. Without the command retry function, a command is fetched
only once from storage by a channel. This allowed a program to determine
through condition codes or program controlled interruptions (PCI)
that a CCW had been fetched and accepted by the channel. The CCW could
be modified before execution. With the command retry function, this
procedure cannot be repeated because the channel fetches the CCW from
storage again on a command retry sequence. In the case of data chaining,
the channel retries commands starting with the first CCW in the data
chain.
- Program Controlled Interrupts (PCI): A CCW containing a PCI flag
can cause multiple program-controlled interrupts. This will happen
if the PCI-flagged CCW was retried during a command retry procedure
and a PCI could be generated each time the CCW is executed.
- Residual Count: If a channel program is prematurely terminated
during the retry of a command, the residual count in the channel status
word (CSW) will not necessarily indicate how much storage was used.
For example, if the storage control detects a wrong-length record
error condition, an erroneous residual count is stored in the CSW
until the command retry is successful. When the retry is successful,
the residual in the CSW reflects the correct length of the data transfer.
- Command Address: When data chaining with command retry, the CSW
might not indicate how many CCWs have been executed at the time of
a PCI. For example:
CCW# |
Channel Program |
---|
1 |
Read, data chain |
2 |
Read, data chain |
3 |
Read, data chain, PCI |
4 |
Read, command chain |
In this example, assume that the storage control
signals command retry on Read #3 and the processor accepts the PCI
after the channel resets the command address to Read #1 because of
command retry. The CSW stored for the PCI will contain the command
address of Read #1 when the channel has actually progressed to Read
#3.
- Testing Buffer Contents on Data Read: Any program that tests a
buffer to determine when a CCW has been executed and continues to
execute based on this data can get incorrect results if an error is
detected and the CCW is retried.