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]