2002-06-17 14:55:13

by James Bottomley

[permalink] [raw]
Subject: Re: [linux-usb-devel] Re: /proc/scsi/map

[email protected] said:
> These may be an exception. You usually want to get drivers involved
> even if only for synchronisation. Failing to do so has already let to
> problems with usb storage.

I don't deny that there may be devices that need some type of vendor specific
probe to get the information.

> That is the point. The driver knows best what kind of devices it works
> on. You can forget about the whole identification method business, if
> you go for the driver. In case of usb storage and firewire that data
> is already sitting there ready for taking. I suspect the same for
> fibrechannel.

But, in SCSI, you can't. Just for a simple device showing up as a SCSI disc
(that's a real SCSI disc, attached say by parallel connectors), there are
several potential ways to get a unique ID. No one way works for all such
disks, that is the nub of the problem.

I think, by driver, we may mean different things. A scsi disc attaches like
this:

+----+
| sd |
+----+
|
+-------+
| mid |
| layer |
+-------+
|
+-----+
| lld |
+-----+
|
+--------+
| real |
| device |
+--------+

but the only piece that has disc specific logic is sd. The lld is specific to
the host adapter card (not shown), not the real device, so it is not the right
element to probe for an ID.

In USB, things look slightly different:

+----+
| sd |
+----+
|
+-------+
| mid |
| layer |
+-------+
|
+---------+
| usb |
| storage |
+---------+
|
+--------+
| real |
| device |
+--------+

Here, the usb-storage driver does know about the real device (and already has
a huge exception table), so it has enough knowledge to probe for an identifier.

The thing I think is a bad idea is having to code the logic to look up a
unique identifier (plus all the exceptions) in sd. But for the pure SCSI
stack, there's nowhere else to place it. Even if you get usb-storage to
supply an API for providing the id, it will be one of the few llds that can
retrieve this, so it will become just another exception sd has to cope with.

James



2002-06-17 16:11:14

by Patrick Mansfield

[permalink] [raw]
Subject: Re: [linux-usb-devel] Re: /proc/scsi/map

On Mon, Jun 17, 2002 at 09:54:56AM -0500, James Bottomley wrote:
>
> But, in SCSI, you can't. Just for a simple device showing up as a SCSI disc
> (that's a real SCSI disc, attached say by parallel connectors), there are
> several potential ways to get a unique ID. No one way works for all such
> disks, that is the nub of the problem.

I agree it would be nice to get the ID via user space, but it is not that
hard to get the ID, and trying the various SCSI INQUIRY pages that supply
the ID is not complicated. Putting ID code (including hotplug hooks) into
user space is probably more complex. I would also like the ID at scan time
for multi-path use so we don't have to allocate extraneous Scsi_Devices,
and later coalesce them.

Mike Sullivan's driverfs patch for SCSI (without any device naming) includes
code to look up an ID, and store the ID in driverfs; he was working on
a patch for 2.5.21.

FYI the various SCSI ID pages and such are described in the SCSI primaray
command for example the following:

ftp://ftp.t10.org/t10/drafts/spc3/spc3r07.pdf

Near page 316 (section 8.6) are descriptions for INQUIRY VPD page 0x80
and 0x83.

> but the only piece that has disc specific logic is sd. The lld is specific to
> the host adapter card (not shown), not the real device, so it is not the right
> element to probe for an ID.

Any SCSI device can return an ID (i.e. INQUIRY VPD page 0x80 or 0x83),
so the logic need not be in sd. I don't know how removable media should
be handled (not a SCSI device being added/removed from the system), for
tape this is probably not an issue.

>
> Here, the usb-storage driver does know about the real device (and already has
> a huge exception table), so it has enough knowledge to probe for an identifier.

>
> The thing I think is a bad idea is having to code the logic to look up a
> unique identifier (plus all the exceptions) in sd. But for the pure SCSI
> stack, there's nowhere else to place it. Even if you get usb-storage to
> supply an API for providing the id, it will be one of the few llds that can
> retrieve this, so it will become just another exception sd has to cope with.
>
> James

usb-storage could emulate VPD page 0x83 to return the GID, and that could
then be used by the mid-layer or a user level program to extract an ID.

-- Patrick Mansfield