Set Capacity Proposal -- X3T10/95-260 rev. 1
Gerry_Houlder at notes.seagate.com
Wed Aug 16 07:35:37 PDT 1995
This is the Set Capacity proposal I will be presenting at the next working
group meeting. Reflector comments are welcome. Anything that can be resolved on
the reflector will shorten the meeting time.
Date: Aug. 15, 1995
To: X3T10 Committee
From: Gerry Houlder, Seagate Technology
Subj: Set Capacity Proposal
This proposal came about because some customers want to define the capacity
reported by a disk drive as something less than its full capacity. The main
reason for this is customers wanting drives from different vendors to have
exactly the same number of logical blocks. This is desired for ease of
replacement, especially in disk array applications.
Another reason is that drives are getting too large for some operating systems
to handle. For example, many operating systems will only handle 8 GB of storage
on a single device and several vendors are making drives with a larger capacity
than this. In this case, the customer may want to map part of the capacity as
LUN 0 and another part as LUN 1. This proposal addresses that need also.
In discussions at the July 11 working group meeting, it was pointed out that
several vendors (including Seagate) use the Number of Blocks field in the MODE
SELECT block descriptor to achieve this purpose. This is only a 3 byte field,
however, so an extension of some sort would have to be made so that 4 byte
values can be used. About 60% of that group felt that the backwards
compatibility issues caused by such an extension made this option unacceptable.
The group did favor adding a set capacity capability to the READ CAPACITY
command. The changes to SBC to add this capability are detailed at the end of
The set capacity feature is activated by a new bit (SC, for Set Capacity) and
uses the Logical block address field as the last LBA desired for the drive. The
target returns 8 bytes of data, with the Returned logical block address field
set to the actual last logical block that is set into the drive. This value
will be less than or equal to the requested capacity, depending on the capacity
available in the target.
This feature can be used to split the capacity of a drive into several LUNs.
For example, a 10 GB drive can be split into 3 LUNs as follows:
1. Send a READ CAPACITY w/SC option to LUN 0, setting the capacity to 4 GB.
2. Send a READ CAPACITY w/SC option to LUN 1, setting the capacity to 4 GB.
3. Send a READ CAPACITY w/SC option to LUN 2, requesting a capacity of 4 GB.
The drive will return a capacity of 2 GB (all of its remaining capacity).
4. If a READ CAPACITY w/SC option is sent to LUN 3, the command should end with
CHECK status, sense bytes set to LUN not supported (no capacity remains).
The SBC description of the READ CAPACITY command should read as described in
the following text. Additions for the set capacity feature are enclosed in <>.
6.1.7 READ CAPACITY command
The READ CAPACITY command (see table 17) provides a means for the application
client to request information regarding the capacity of the logical unit.
[Table 17 goes here]
See 6.1.2 for a definition of the RelAdr bit and the logical block address
The logical block address shall be zero if the PMI bit <and SC bit are> zero.
If the PMI <and SC bits are> zero and the logical block address is not zero,
the device server shall return a CHECK CONDITION status, the sense key shall be
set to ILLEGAL REQUEST and the additional sense code set to ILLEGAL FIELD IN
<When the> partial medium indicator (PMI) bit <and set capacity (SC) bit are>
zero, the returned logical block address and the block length in bytes are
those of the last logical block on the logical unit.
A PMI bit of one <and SC bit of zero> indicate that the returned logical block
address and block length in bytes are those of the logical block address after
which a substantial delay in data transfer will be encountered. This returned
logical block address shall be greater than or equal to the logical block
address specified by the RelAdr and logical block address fields in the command
NOTE 6: This function is intended to assist storage management software in
determining whether there is sufficient space on the current track, cylinder,
etc., to contain a frequently accessed data structure, such as a file directory
or file index, without incurring an access delay.
<A PMI bit of zero and SC bit of one (this combination is the set capacity
feature) indicate that the logical block address field contains the requested
last logical block address for the logical unit. If the LUN is zero, a value of
zero in the logical block address field indicates that the logical unit shall
be set to its highest available capacity. If the LUN field is non-zero, a value
of zero in the logical block address field indicates that the logical unit
shall have a capacity of zero and become unsupported. The returned logical
block address and block length in bytes are the values for that logical unit
after the set capacity function as been performed. This returned logical block
address shall be less than or equal to the logical block address specified by
the logical block address field in the command descriptor block (except when
the LUN is zero and the logical block address field is zero). Once GOOD status
is returned, the new last logical block address value shall be preserved across
power cycles or reset events until superseded by another READ CAPACITY command
with SC bit of one.
NOTE X This function is intended to assist storage management software by
allowing an installation procedure that makes logical units have exactly the
same capacity. This characteristic is especially desired for arrays, where a
failed unit must be replaced by another unit with identical capacity. It is
also useful for splitting very large capacity drives into several logical
units. This allows a large drive to stay within the capacity limit for a single
drive that may exist in storage management software.
If the PMI and SC bits are both one, the device server shall return a CHECK
CONDITION status, the sense key shall be set to ILLEGAL REQUEST and the
additional sense code set to ILLEGAL FIELD IN CDB.
A reservation conflict shall occur when a READ CAPACITY command is received
|from an initiator other than the one holding a logical unit reservation. A
reservation conflict shall occur when a READ CAPACITY command with set capacity
feature is received from an initiator other than one holding any extent
reservation. A READ CAPACITY command without set capacity feature shall not be
affected by extent reservations.>
The READ CAPACITY data (see table 18) shall be sent during the DATA IN phase of
[Table 18 goes here]
More information about the T10