Subject: Re: 64-bit LUN support
To: Jonathan Stone <jonathan@dsg.stanford.edu>
From: Manuel Bouyer <bouyer@antioche.lip6.fr>
List: tech-kern
Date: 01/07/2005 12:11:39
On Thu, Jan 06, 2005 at 05:21:36PM -0800, Jonathan Stone wrote:
> 
> [...]
> >The other part of the question is what to do about devices that don't=20
> >support REPORT_LUNS. I think some sort of fall-back to the old-style "max=
> >=20
> >LUNs" method would be best.
> 
> Hi Bill,
> 
> Its been years time since I checked the T10/T11 drafts, but as best I
> recall, there's some SCSI level (SCSI-3? The last ANSI level?)  where
> any device claiming that level is required(?) to implement
> REPORT_LUNS.
> 
> I've also seen devices just below that level which just won't talk
> happily to an initiator unless the initiator sends them a REPORT_LUNS.
> (The Compaq RA4000 RAID array was infamous for that. IIRC, the Linux
> driver for the recommended Compaq/Aglient controller sent a REPORT
> LUNs from inside the driver, then remapped the native LUNs to 8-bit
> LUNS for upper layers; or something equally distaseful.)
> 
> So (though it may well be what you planned) I suggest something like:
> 
>   1. Sending REPORT LUNS to any devices which report themselves as SCSI-3
>   2. Add a quirk table for SCSI-2 devices which reallyh want a REPORT_LUNS;
>   3. Fall back to the linear probe for all other devices not covered by 1 and 2,
>      which don't have the quirk that they're a single-LUn device that
>      incorrectly reports itself present on all LUNs.

This looks reasonable.

> 
> Havent thought about the storage issues, tho.

One question is how much Luns these devices will really have.
If there are a lot of them we may have issues with the chan_periphtab[]
has table. Right now it's 16. But if a periph can have hunderd of LUNs
(and I guess some have, otherwise what would be the purpose of 64bit LUN ?)
then we'll have a problem in scsipi_lookup_periph(). chan_periphtab's size will
probably have to be adjusted dynamically.

There are a few places where we do a 0->chan_nluns loop in scsipi_base.c,
and some drivers. The purpose it to find either one, or all LUNs of a
target. Because of this, switching to a per-target periphtab[] list may make
sense.

- 
Manuel Bouyer <bouyer@antioche.eu.org>
     NetBSD: 26 ans d'experience feront toujours la difference
--