Subject: Re: iSCSI Target Reset

From: "Joseph C. Nemeth" <[email-masked]>
Date: Wed, 02 May 2001 17:25:04 -0600

On the Spectra Logic tape drives and libraries, we can and do implement 
both Target Reset and LUN Reset on interfaces that support these task 
management functions (e.g. Fibre Channel), and when we receive either, we 
generally do what each of these is supposed to do, making allowances for 
real environments. However, Target Reset is useless to us - and its use is 
dangerous in a shared environment, because it really should affect multiple 
LUNs on the controller. Application vendors have told us that on some host 
systems, access to Target Reset or LUN Reset is hidden by the drivers, so 
they often can't use it even when they need to, making both Reset functions 
mostly a nuisance. So Target Reset could be deprecated in iSCSI and there 
would be no tears here. LUN Reset is probably still useful.

Reset seems to be a problem because it is a BIG hammer used to solve a lot 
of different problems, often with undesirable side effects. Here are the 
main things Reset is used for:
    * Clear a hung parallel SCSI bus (only applies to parallel SCSI)
    * Reset parallel SCSI target data transfer parameters (e.g. sync and 
wide, only applies to parallel SCSI)
    * Reset a hung SCSI state machine (doesn't happen much, any more, with 
intelligent chipsets)
    * Clear the command queues for one or more LUNs
    * Clear LUN reservations made by a defunct host
    * Reset all Mode Pages to default/last saved values (rarely useful, 
once you can communicate with the device)
    * Rewind/reload tapes in tape drives (usually an undesirable side-effect)
    * Re-inventory autochangers and return robotics to a "known state" 
(usually an undesirable side-effect)
    * Set Unit Attention conditions (often silently swallowed by drivers)
In particular, trying to gracefully recover control of a device that has 
been reserved by a host that has gone down seems to be what's really 
driving this recent round of discussions about Reset. Reservation 
preemption is a needed function that simply isn't in SCSI, other than using 
Reset -  or making the shift to Persistent Reserve In/Out, which (frankly) 
has too many bells and whistles and breaks existing code, since you can't 
mix Persistent Reserve with Reserve.

I would like to see a simple extension of Reserve and Release to allow 
existing reservations to be preempted. The preempted initiator should get a 
UNIT ATN condition to let it know that it got bumped (and there is already 
a standard UNIT ATN error defined), but other than that, the LUN state 
should be left strictly alone. If this feature were added, I think it would 
take a lot of pressure off the Reset issue. This could be easily prototyped 
by using the VU bits (6 or 7) of the CDB Control Byte in the Reserve or 
Release command, and later standardized by moving the bit to one of the 
reserved bits in byte 1 of the CDB.

Joseph C. Nemeth          Precision Algorithms          (970) 226-5427
contact:                         Spectra Logic                    (303) 
449-6400