Date: June 7, 1990 To: X3T9.2 Membership From: John Lohmeyer, NCR principal member of X3T9.2 Subject: Proposed clarifications to SCSI-2 re Reservations Over the past two months we have been discussing the interaction of device reservations with the prevention-of-medium-removal condition. There are some inconsistencies between the direct-access device model and the actual RESERVE and RELEASE command descriptions. Furthermore, although device reservations are "independent" of the prevention-of-medium-removal condition, there is no guidance anywhere on whether an initiator can break through an existing reservation to establish a prevention-of-medium-removal condition. To top all of this off, Paul Boulay recently noticed that in our zeal to improve the RESERVE and RELEASE command wording, we managed to drop a requirement that I'm sure we all want: that only the device that made a reservation can release it. I sense that a consensus is building on how all of these issues should be resolved. I offer the following proposed wording clarifications in hopes that we can authorize the SCSI-2 Technical Editor to make these changes during the final editing. Addition and deletion information is not shown in the ASCII version. ------------------------------------------------------------------------------ 8.1.7. Reservation The following list explains the target's actions in a situation where a reservation exists for various commands. Unless otherwise noted, an initiator that issues any command to a direct-access device that has a logical unit reservation to another initiator, incurs a reservation conflict. [unchanged paragraphs not shown] The FORMAT UNIT, PREVENT ALLOW MEDIUM REMOVAL (with a prevent bit of one), REZERO UNIT, and START STOP UNIT commands return RESERVATION CONFLICT status if any other initiator has an extent reservation on a direct-access device. [unchanged paragraphs not shown] 8.2.11. RELEASE Command Table 8-24: RELEASE Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (17h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | 3rdPty | Third Party Device ID | Extent | -----|-----------------------------------------------------------------------| 2 | Reservation Identification | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RESERVE and RELEASE commands provide the basic mechanism for contention resolution in multiple-initiator systems. The RELEASE command (Table 8-24) is used to release a previously reserved logical unit, or, if the extent release option is implemented, to release previously reserved extents within a logical unit. A reservation may only be released by the initiator that made it. It is not an error for an initiator to attempt to release a reservation that is not currently valid or is held by another initiator. In this case, the target shall return GOOD status without altering any reservations. IMPLEMENTORS NOTE: The reservation queuing option in X3.131-1986 has been removed from SCSI-2. [unchanged paragraphs not shown] 8.2.12.1. Logical Unit Reservation (Mandatory). If the extent bit is zero, this command shall request that the entire logical unit be reserved for the exclusive use of the initiator until the reservation is superseded by another valid RESERVE command from the initiator that made the reservation or until released by a RELEASE command from the same initiator that made the reservation, by a BUS DEVICE RESET message from any initiator, by a hard RESET condition, or by a power on cycle. A logical unit reservation shall not be granted if the logical unit or any extent is reserved by another initiator. It shall be permissible for an initiator to reserve a logical unit that is currently reserved by that initiator. If the extent bit is zero, the reservation identification and the extent list length shall be ignored. If the logical unit, or any extent within the logical unit is reserved for another initiator, the target shall return RESERVATION CONFLICT status. If, after honoring the reservation, any other initiator attempts to perform any command on the reserved logical unit other than an INQUIRY, REQUEST SENSE, PREVENT ALLOW MEDIUM REMOVAL (with a prevent bit of zero), or a RELEASE command, the command shall be rejected with RESERVATION CONFLICT status. [unchanged paragraphs not shown] 9.2.9. RELEASE UNIT Command Table 9-12: RELEASE UNIT Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (17h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | 3rdPty | Third Party Device ID |Reserved| -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RESERVE UNIT and RELEASE UNIT commands provide the basic mechanism for contention resolution in multiple-initiator systems. The RELEASE UNIT command (Table 9-12) is used to release previously reserved logical units for the requesting initiator, or if it is a third-party release, to another specified SCSI device. If a valid reservation exists for the I_T_L nexus, the target shall release the reservation and return GOOD status. A reservation may only be released by the initiator that made it. It is not an error for an initiator to attempt to release a reservation that is not currently valid or is held by another initiator. In this case, the target shall return GOOD status without altering any reservations. [unchanged paragraphs not shown] 9.2.10. RESERVE UNIT Command Table 9-13: RESERVE UNIT Command ============================================================================== Bit| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Byte | | | | | | | | | ============================================================================== 0 | Operation Code (16h) | -----|-----------------------------------------------------------------------| 1 | Logical Unit Number | 3rdPty | Third Party Device ID |Reserved| -----|-----------------------------------------------------------------------| 2 | Reserved | -----|-----------------------------------------------------------------------| 3 | Reserved | -----|-----------------------------------------------------------------------| 4 | Reserved | -----|-----------------------------------------------------------------------| 5 | Control | ============================================================================== The RESERVE UNIT and RELEASE UNIT commands provide the basic mechanism for contention resolution in multiple-initiator systems. The RESERVE UNIT command (Table 9-13) is used to reserve logical units for the exclusive use of the requesting initiator, or if it is a third-party reservation, to another specified SCSI device. This command requests that the entire logical unit be reserved for the exclusive use of the initiator until the reservation is superseded by another valid RESERVE UNIT command from the initiator that made the reservation or until released by a RELEASE UNIT command from the same initiator that made the reservation, by a BUS DEVICE RESET message from any initiator, by a hard reset condition, or by a power on cycle. The reservation shall not be granted if the logical unit is reserved by another initiator. It shall be permissible for an initiator to reserve a logical unit that is currently reserved by that initiator. If the logical unit is reserved for another initiator, the target shall return RESERVATION CONFLICT status. If, after honoring the reservation, any other initiator attempts to perform any command on the reserved logical unit other than an INQUIRY, REQUEST SENSE, PREVENT ALLOW MEDIUM REMOVAL (with a prevent bit of zero), or a RELEASE UNIT command, the command shall be rejected with RESERVATION CONFLICT status. [unchanged paragraphs not shown]